Everything the Application Can Do, Your Code Can Do.

Create, configure and invoke agents over a REST API with streamed execution events. No capability is locked to the application, and every call lands in the same audit trail your operators use.

Transport
REST + server-sent events
Auth
Scoped keys, per-agent grants
Residency
Single-tenant VPC or your cloud
API explorerSandbox key Pick an endpoint, or send it again
POST/v1/agents
Authorization: Bearer tt_test_••••••••9a08Content-Type: application/json {"template": "support_triage","name": "renewal-assistant","knowledge_bases": ["legal", "sales"],"guardrails": { "pii_redaction": true }}
201 Createdin 80 ms
POST/v1/agents/agt_7Q2f/invoke
Authorization: Bearer tt_test_••••••••9a08Content-Type: application/json {"input": "draft a renewal email for Acme Co","mode": "agent","session_id": "sess_41c8","stream": true}
200 OKin 1.4 s
PATCH/v1/agents/agt_7Q2f
Authorization: Bearer tt_test_••••••••9a08Content-Type: application/json {"model": "claude-sonnet-4-6","memory": { "window": 20 },"knowledge_bases": { "detach": ["sales"] }}
200 OKin 50 ms
POST/v1/agents/agt_7Q2f/tools
Authorization: Bearer tt_test_••••••••9a08Content-Type: application/json {"type": "mcp_server","url": "https://tools.internal/mcp","allow": ["get_account", "create_ticket"],"auth": { "mode": "client_credentials" }}
201 Createdin 240 ms
Event streamidle
  1. agent.createdid=agt_7Q2f · template support_triage
  2. kb.attachedlegal (4,182 docs), sales (2,910 docs)
  3. guardrails.appliedpii_redaction, refusal policy v3
  4. agent.ready201 Created · invocable immediately

Idempotent on name: a repeat call returns the existing agent.

Written to the audit logcall_2f9a · POST /v1/agents
  1. agent.thinkingplanning: retrieve contract terms, then draft
  2. retrieval.hit3 passages · MSA v6 §11.2 (0.94)
  3. tool.callget_account(id="acme-co") → 200 in 62ms
  4. token.deltastreaming draft… 214 tokens
  5. agent.responsecomplete · 2 citations attached

Same event contract the application itself consumes.

Written to the audit logcall_41c8 · renewal-assistant · support-widget
  1. config.diff3 fields changed vs. version 11
  2. kb.detachedsales · in-flight sessions unaffected
  3. config.applied200 OK · version 12 · no redeploy

Config changes are versioned and revertable by version id.

Written to the audit logcall_7d10 · PATCH agt_7Q2f · version 12
  1. mcp.handshaketools.internal · 9 tools advertised
  2. schema.validated2 allowlisted, 7 rejected by policy
  3. tools.registered201 Created · callable this session

Anything outside the allowlist is unreachable, even if advertised.

Written to the audit logcall_93be · POST agt_7Q2f/tools

Send the request to open the stream.

Build agents in the application. Call them from your code.

Every agent you configure in ThinkStack is an endpoint your services can call. Put one behind a product feature, run another from a nightly job, chain two into a workflow, each with its own knowledge, tools and permissions.

Features in your product

Stream an answer, a draft or a recommendation into your own interface while the agent works.

support-assistantREST + SSE

Backend jobs

Run an agent from a queue worker, cron job or webhook and write its structured output back to your systems.

invoice-reviewerREST

Internal tools

Give an internal dashboard or chat bot the agents your teams already rely on in the application.

policy-answersREST + SSE

Multi-step workflows

Pass one agent’s structured output to the next, with every step of the chain logged.

contract-reviewer → summary-writerREST + SSE
The same path for every agentapplication → key → your code
1 · Build

Create and test the agent in the application: model, prompt, knowledge bases, tools and guardrails.

2 · Grant

Issue a scoped key that reaches that agent, and only that agent, in the environment you choose.

3 · Call

Invoke it over REST from any language and handle the streamed events in your own code.

Rate limits, retries and idempotency keys work the same way for every agent and every caller.

A key can only reach the agents you grant it.

Keys are scoped per environment and per agent. Revoking a grant takes effect on the next request, with no redeploy and no rotation window.

API keysChange a grant, then save
Keys

Granted agents

Sample keys and agents. Grants shown here are illustrative.

Every invocation is replayable.

Each call stores its inputs, retrieved context, tool calls and final output. When a customer disputes an answer, you can show exactly what the agent saw.

Audit · invocationsOpen a row to replay it

Execution tracecall_41c8

Input

“draft a renewal email for Acme Co” · mode agent · session sess_41c8

Retrieved context

3 passages · MSA v6 §11.2 (0.94), Renewal playbook §3, Acme account notes

Tool calls

get_account(id="acme-co") → 200 in 62ms

Output

Draft renewal email · 214 tokens · 2 citations attached

Execution tracecall_3b07

Input

New ticket: “Invoice shows a duplicate charge”

Retrieved context

2 passages · Billing FAQ (0.91), Refund policy §2

Tool calls

classify_ticket → billing · 40ms

Output

Routed to the Billing queue · priority normal

Execution tracecall_e5a2

Input

“Review the Calloway MSA for liability caps”

Retrieved context

None retrieved

Tool calls

None called

Refusal

Sandbox keys cannot reach production knowledge bases.

Execution tracecall_90d4

Input

“Summarise renewal terms for account acme-co”

Retrieved context

2 passages · MSA v6 §11.2 (0.94), Order form 2025-03

Tool calls

get_account(id="acme-co") → 200 in 58ms

Output

Four-line renewal summary · 1 citation attached

Execution tracecall_c61f

Input

“why was I charged twice this month?”

Retrieved context

1 passage · Billing policy v4 §2 (0.89)

Tool calls

None called

Output

Plain-language explanation · 1 citation attached

Execution tracecall_2a8e

Input

“where is my invoice for September?”

Retrieved context

1 passage · Billing FAQ (0.88) · kept for replay

Tool calls

lookup_invoice → timed out after 10s

Error

Tool call timed out. No answer was returned to the caller.

Showing the last 6 of 41,208 invocations today. Each row expands to the full execution trace.

Sample records for illustration.

Observable, configurable, locked down.

Agents in your stack behave like the rest of your infrastructure: visible while they run, changeable without a release, and limited to exactly what you grant.

See every step as it happens

Thinking, retrievals, tool calls and tokens arrive as server-sent events. Show progress in your interface, or act on each event in your backend.

text/event-stream

Change behaviour without a deploy

Swap the model, edit guardrails, or attach and detach knowledge bases with one PATCH. Every change is versioned and revertable.

PATCH /v1/agents/:id

Only the tools you allow

Register MCP servers or your own endpoints as tools. Each agent gets an allowlist, and every call is checked against its schema.

allowlist per agent

Ready for a security review

Per-tenant data boundaries, scoped keys and an immutable execution log, so your security team’s questions already have answers.

scoped keys + execution log

Frequently Asked Questions

Common questions about Agent API Gateway.

What can we do over the API that we can't do in the console?+
Nothing is console-only — that's the design. Agents can be created, configured and invoked over a REST API with execution events streamed back as server-sent events, and every call lands in the same audit trail operators use. The console consumes the same event contract your own code does.
Do we need a separate integration per surface?+
No. The same configured agent can answer a support widget, a queue worker, a Slack or ticketing webhook and another agent in a chain — one integration, one permission model, one place to change the prompt. Rate limits, retries and idempotency keys behave identically across all of them.
How tightly can we scope an API key?+
Per environment and per agent. A key reaches only the agents explicitly granted to it, and revoking a grant takes effect on the next request with no redeploy and no rotation window. Agents a key hasn't been granted return 403 without revealing that they exist.
If a customer disputes an answer, can we show what happened?+
Yes. Every invocation stores its inputs, retrieved context, tool calls and final output, and each row in the log expands to the full execution trace. You can show exactly what the agent saw at the moment it answered, rather than reconstructing it afterwards.
Does changing an agent require a deploy?+
No. Models, guardrails, attached knowledge bases and tool grants are all PATCHable over the API — nothing about an agent's configuration requires shipping code. Tools are registered as MCP servers or your own endpoints, with an allowlist per agent and a schema checked on every call.