The lightweight, developer-first safety layer for AI actions
Queue, approve, and execute API calls safely from your agents. Add human approval, retries, and audit trails in minutes.
If your AI can issue refunds, update customer data, or trigger internal APIs — one bad output hits a real API. One retry becomes a duplicate charge.
DispatchQ sits between your agent and the real world.
Replace any API call your AI makes with DispatchQ.
Every action goes through a gate.
You decide what needs a human — refunds always, safe reads never. Everything else is configurable.
import { DispatchQ } from "dispatchq"
const dq = new DispatchQ({ apiKey: process.env.DISPATCHQ_API_KEY })
await dq.send({
url: "https://api.stripe.com/v1/refunds",
method: "POST",
body: { charge: "ch_3Qx9R2eZ" },
approve: true,
})
// => { id: "act_Xk9mP2nQ4rT1vW", status: "awaiting_approval" } Your AI doesn't call Stripe directly. It goes through DispatchQ.
Your AI sends actions to DispatchQ instead of calling APIs directly.
Refund a payment, update a CRM record, trigger a deploy. Instead of calling the API directly, it calls DispatchQ.
The action is validated, deduped, and held for approval if configured. Retries and signing are automatic.
Approve via MCP, SDK, CLI, or API. Or auto-approve safe actions. You define the rules.
Signed delivery to the target API. Full response stored. Your agent or system can fetch the result anytime.
Because this happens.
Before
// ❌ BEFORE — your AI calls Stripe directly
await stripe.refunds.create({
charge: "ch_3Qx9R2eZ",
})
// No approval. No retries. No audit trail.
// A hallucinated charge ID hits a real API.
// A retry double-refunds a customer. After
// ✅ AFTER — your AI goes through DispatchQ
await dq.send({
url: "https://api.stripe.com/v1/refunds",
method: "POST",
body: { charge: "ch_3Qx9R2eZ" },
approve: true,
})
// Human approves. DispatchQ executes.
// Signed delivery. Full audit trail. Safe retries. fetch() with dq.send()You don't need to re-architect anything. Import the SDK, swap one function, and every API call your AI makes now has approval, retries, deduplication, and a full audit trail.
approve: true.fetch() — serverless, Node, edge.import { DispatchQ } from "dispatchq"
const dq = new DispatchQ({ apiKey: "dq_live_..." })
// Before: await fetch("https://api.stripe.com/v1/refunds", ...)
// After:
await dq.send({
url: "https://api.stripe.com/v1/refunds",
method: "POST",
body: { charge: "ch_3Qx9R2eZ" },
approve: true, // hold for human approval
dedupe: "refund-ch_3Qx9R2eZ", // prevent duplicates
}) // Define tools that go through DispatchQ.
// The agent never gets direct API access.
const refundTool = {
name: "refund_payment",
description: "Refund a Stripe charge",
execute: async (args) => {
return dq.send({
url: "https://api.stripe.com/v1/refunds",
body: args,
approve: true,
})
},
}
// Your agent only knows about refund_payment.
// It cannot call Stripe directly. The strongest safety pattern: your agent doesn't have credentials to call production APIs. Only DispatchQ does. Define tools that route through DispatchQ, and your AI literally cannot bypass the safety layer.
From AI support agents to internal copilots. DispatchQ handles actions so your AI doesn't go rogue.
Your support AI handles refunds, credits, and account changes. Every sensitive action held for approval — so a hallucinated charge ID doesn't trigger an unintended refund, and a retry doesn't double-charge a customer.
→ Require approval before execution. Auto-approve safe reads.
Modify CRM, run admin actions.
→ Audit everything your AI does
Sync systems, call flaky APIs.
→ Retries + durability built in
A complete safety layer. Simple REST API, SDK, MCP tools, and CLI.
Pause jobs for sign-off. Approve via MCP, API, or auto-approve safe actions.
Exponential backoff from 20s to 1h. Configurable max attempts per job.
Dedupe keys and idempotency headers. No double refunds from agent retries.
Every response stored. Query status, body, and duration. Results outlive sessions.
Every delivery signed with SHA-256. Verify requests are from DispatchQ.
Schedule actions for later. Delay by seconds, minutes, or hours. Recurring schedules with cron.
Every action logged with who approved it, when it ran, and the full response. Queryable via API.
Works with ChatGPT, Claude, and Cursor. Full CLI for developers.
Your agent can queue actions, request approval, and check results — all through MCP tools. No custom code needed.
Per job, not per message. Safety features on every plan.
Experiment safely
Start freeProduction protection
Get startedEnterprise-grade control
Get startedAll plans include approval gates, safe retries, deduplication, signed delivery, stored results, audit history, SDK, MCP, and CLI.
No credit card required. Get your API key in 30 seconds.
Your AI should never call production APIs directly.