LiveHeyGen ships HyperFrames Studio for Mac and Linux
IndieFounder
LatestCommunityProductsAI LearningRadarRoadmaps
Explore
FoundersStoriesBuild ExperimentsResearchTrendingCompareGuidesActivitySavedTopicsNewsletter
Submit your product →
Topics
StartupsAISaaSTechnologyProductGrowthMarketingMoneyBusinessDesignFounderToolsLaunchesCase StudiesNewsSecurity
Browse all topics →
Sign in
IndieFounder

Practical intelligence for independent founders building products, companies, and useful things.

The founder brief

Ideas worth building. Delivered weekly.

Join the newsletter

IndieFounder

Read, learn, discover, and build with a community of independent founders.

Independent by design

Explore

01
  • Latest
  • Learning
  • Guides
  • Products
  • Founders
  • Radar
  • Community
  • Topics

Publication

02
  • About
  • Editorial policy
  • Newsletter
  • Contact
  • Corrections

Legal

03
  • Privacy
  • Cookies
  • Disclaimer
  • Sitemap
  • RSS feed

© 2026 IndieFounder

RSSGet the brief
AI

How to Build an AI Agent Around the Responses API

Build a focused agent around the Responses API with typed tools, server-side authorization, safe retries, and an evaluation loop.

Kirtesh AdmuteKirtesh Admute·Oct 02, 2026 01:00 PM·5 min read·1,133 words
How to Build an AI Agent Around the Responses API

A production Responses API agent is mostly application engineering around a model call: tool contracts, state, authorization, idempotency, observability, and tests.

How To Build An Ai Agent Around The Responses Api

A production Responses API agent is mostly application engineering around a model call: tool contracts, state, authorization, idempotency, observability, and tests.

ts
const result = await client.responses.create({
  model: process.env.OPENAI_MODEL!,
  input: message,
  tools: [getCustomer, searchDocs]
});

Pick one repeatable job

Choose a workflow that starts with a clear input and ends with a measurable outcome. Support triage, lead research, invoice review, and document extraction are better starting points than a vague “general agent.”

Define the request envelope

Give the model the smallest useful context: the user's request, relevant state, and the tools available for this task. Keep credentials and private infrastructure details outside the prompt.

Implement a narrow function tool

A tool should behave like a normal typed API endpoint. Define the name, purpose, input schema, authorization rule, side-effect level, and output shape. Do not expose a generic execute_sql capability to a business agent.

Return compact results

Tool output should be optimized for the next decision. A customer lookup may only need status, plan, locale, and account ID rather than the entire customer record. Smaller tool results lower context noise and make traces easier to inspect.

Add a real stopping rule

Agents fail when the runtime can keep calling tools indefinitely. Set maximum turns, detect repeated failures, and stop when the workflow reaches a terminal state. A final answer should not be the only success condition; record the underlying business outcome too.

Decision table

Metric Value Note
Layer Responsibility Measure in production
Model Interpretation and reasoning Measure in production
Tool Typed capability Measure in production
Server Auth + business rules Measure in production
Database Source of truth Measure in production
Audit Record important side effects Measure in production

Practical checklist

  • Single workflow first
  • Typed tools
  • Server-side auth
  • Bounded retries
  • Evaluation cases
  • Audit events

Final takeaway

Build the smallest workflow that proves the customer outcome. Keep tools narrow, business state authoritative, side effects permissioned, and the runtime observable. Agent infrastructure should remove manual work without turning your application into an uncontrolled automation layer.

Add an evaluation loop

Create a fixture with representative requests, expected tools, approval rules, and expected terminal states.

json
{
  "input": "show invoices for this account",
  "expected_tool": "list_invoices",
  "requires_approval": false
}
Boundary Test Failure to catch
Auth wrong user cross-account access
Tool schema missing field malformed execution
Timeout slow provider hanging request
Retry duplicate request double side effect
Approval forged approval unauthorized action

Show progress safely

For long workflows, expose status such as “Searching documentation”, “Checking account”, “Draft ready”, and “Waiting for approval”. Users need operational progress, not private reasoning.

Add timeouts

A tool should not be allowed to hang the whole request forever.

ts
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 8000);
try {
  return await fetch(url, { signal: controller.signal });
} finally {
  clearTimeout(timer);
}

Use different budgets for different operations. A local database query can have a shorter timeout than an external research call.

Sources

  • https://developers.openai.com/api/docs/guides/responses
  • https://developers.openai.com/api/docs/guides/tools
  • https://developers.openai.com/cookbook/topic/agents

Putting the idea into a production workflow

The practical question behind this topic is how to turn an AI capability into a dependable product component. Start by defining the job in terms of an input, a useful transformation, and an observable outcome. Avoid designing around the model first. The model is one component inside a workflow that also includes application state, tools, permissions, retries, logging, and user feedback.

For an article about How to Build an AI Agent Around the Responses API, a useful first exercise is to write the workflow as a sequence of states. Identify what the user provides, what the model needs to know, what information must come from a trusted system, which operations can change data, and what happens when the model is uncertain. This makes hidden assumptions visible before implementation.

Separate reasoning from authority

A model can interpret a request, classify information, draft a response, or choose between allowed capabilities. It should not become the source of truth for billing, permissions, account ownership, inventory, or destructive actions. Those rules belong in application code. A useful architecture therefore has a clear boundary: the model proposes an action, a typed tool validates it, the application authorizes it, and the system records the result.

This boundary also makes testing easier. Instead of asking whether a model response sounds good, test whether the right tool was selected, whether arguments were valid, whether authorization was enforced, and whether the workflow reached the expected terminal state.

Design for failure from the beginning

AI systems fail differently from ordinary deterministic services. A response can be syntactically valid but semantically wrong. A tool can time out after the external service has already accepted the request. Retrieval can return stale information. Context can become too large. A retry can accidentally repeat a side effect.

Use explicit limits for turns, latency, token usage, and tool calls. Give side-effecting operations idempotency keys where possible. Store enough trace information to reconstruct the run without storing unnecessary private data. When the system cannot safely continue, return a useful fallback or ask for human intervention rather than silently guessing.

Build a small evaluation set

Before launch, collect representative cases rather than relying on a handful of demos. Include normal requests, ambiguous requests, missing data, malformed tool arguments, permission failures, provider errors, and adversarial inputs. Track task success, tool accuracy, latency, cost, and recovery rate. Re-run the same cases after changing the model, prompt, retrieval system, or tool schema.

A practical implementation sequence

  1. Define one repeatable customer job.
  2. Write the expected successful outcome.
  3. List the minimum context required.
  4. Expose only the tools required for that job.
  5. Keep authorization outside the prompt.
  6. Add timeouts, retry limits, and idempotency.
  7. Capture traces and cost per completed task.
  8. Create failure cases before production.
  9. Add a human checkpoint for high-impact actions.
  10. Review real runs and improve the workflow from evidence.

The goal is not to make the agent appear autonomous. The goal is to make a useful workflow reliable enough that a customer can trust its outcome. Start narrow, keep business rules deterministic, measure the complete job rather than only the model response, and expand the tool surface only when the existing workflow is demonstrably stable.

Community

What do you think?

0 comments

React to this article

Comments

0/2000

Trending now

What readers are opening

See all
The Solo Founder Playbook: Bootstrapping a Micro-SaaS to $50K MRR with AI Agents

Startups

The Solo Founder Playbook: Bootstrapping a Micro-SaaS to $50K MRR with AI Agents

Next.js 16 & Turbopack: Building and Shipping Micro-SaaS at Lightning Speed

AI & Code

Next.js 16 & Turbopack: Building and Shipping Micro-SaaS at Lightning Speed

Escaping Tutorial Purgatory: How Indie Hackers Ship From Idea to Production in 7 Days

Startups

Escaping Tutorial Purgatory: How Indie Hackers Ship From Idea to Production in 7 Days

AI agentsResponses APIOpenAITypeScriptfunction calling

Written by

Kirtesh Admute

Kirtesh Admute

Founder

Kirtesh Admute is the founder of IndieFounder, a platform for founders, builders, and people curious about technology. He writes about AI, startups, software, product building, and the lessons that come from building in public.

See an issue with this story?

Continue reading

More from IndieFounder

Article cover

AI

OpenAI Agents API vs Agents SDK vs Responses API: What Changes?

4 days ago · 5 min read

Article cover

AI

AI Agents API Explained: What Indie SaaS Founders Actually Need to Build

5 days ago · 6 min read

Article cover

AI

GPT-6 Sol and Luna Cut API Prices in Half: What a Micro-SaaS Should Route Where

1 week ago · 9 min read

Next storyOpenAI Agents API vs Agents SDK vs Responses API: What Changes?ArchiveBrowse all articles

Newsletter

Get the next brief

Useful founder stories and product lessons, without the noise.

No spam. Just the useful stuff. Unsubscribe whenever you want.

Learn more