https://api.kupe.in) unless noted. Authenticate with Authorization: Bearer <supabase_jwt> from the dashboard, or x-api-key: <kupe_api_key> for server integrations.
Tools — custom HTTP tools and MCP
HTTP tool definitions (CRUD)
Base path:/api/v1/tool-endpoint-defs
MCP server tool definitions (CRUD)
Base path:/api/v1/tools-mcp-server-defs
Same idea as HTTP tools: POST / GET / GET /{id} / PUT / DELETE for MCP-backed tools.
Attach tools to an agent
Base path:/api/v1/agents
Create tools first (
tool-endpoint-defs or tools-mcp-server-defs), then reference their IDs in the agent tools payload when calling POST / PATCH on /{agent_id}/tools.
Post-call analysis — rules and agent mapping
User-scoped rules (CRUD)
Base path:/api/v1/post-analysis
Map rules to an agent
Base path:/api/v1/agents/{agent_id}
Outbound — batch campaigns (end-to-end API)
Base path:/api/v1/batch-call
Requires the outbound feature flag on your account. Authenticate with x-api-key or Bearer on every route below (except Twilio /status-callback, which is called by the carrier).
Prerequisites
GET /api/v1/phone— list provisioned lines; note each row’sid(caller_phone_id).GET /api/v1/agents— note your agentid, or use a workflow id instead.- In the agent system prompt, use variables like
{{name}}that matchvariable_nameson the batch.
End-to-end flow
Batch-level status:
not_started → in_progress (after launch) → completed (all rows terminal).
Recipient status: not_started → calling → completed | failed | no_answer.
All routes
Example: create → add numbers → launch → poll
kupe-voice-agent.openapi.yaml).
Call logs — list, pagination, single session, post-call data
Base path:/api/v1/call-analytics
Post-call analysis fields (when not redacted) appear on the session object, e.g.
post_call_analysis_results and related keys returned by the service layer.
Export (ZIP, optional date range)
GET /call-analytics/export — supports request_id for a single downloadable export, or bulk export with start_date / end_date (YYYY-MM-DD) and email delivery for large ranges.
Billing and usage (usage, cost, credit summary)
Base path:/api/v1/billing
Typical read endpoints (also available under /billing/... where the router is mounted without the /api/v1 prefix):
Removed from the product (do not call): self-serve pricing plans, payment checkout, Razorpay webhooks,
/balance-history (legacy ledger). Historical balance movements and grants are returned from GET /api/v1/wallets/{wallet_id} (see Wallets below).
Other GET /api/v1/billing/** routes your deployment may expose (e.g. forex quotes, service pricing) remain read-only catalog helpers where implemented.
API key vs session (important)
When you authenticate withx-api-key, only GET (and HEAD/OPTIONS) are allowed on /api/v1/billing/**. There is no API-key billing write surface.
Wallets and earnings live under /api/v1/wallets/** and /api/v1/earnings/**. Assigning credits, caps, org business model, markup, and commission are POST operations and require a Bearer (session) token with the appropriate org or super-admin role.
Feature flags
Base path:/api/v1/feature-flags
Wallets (credits, grants, ledger, org business model)
Base path:/api/v1/wallets (plus org-scoped helpers under /api/v1/orgs for business model / commission / markup).
Legacy organization billing routes such as
/organizations/{id}/billing/assign-credits return 410 Gone; use POST /api/v1/wallets/{wallet_id}/grants instead.
Earnings (reseller markup and commission)
Base path:/api/v1/earnings
For org_admin users whose organization is a channel_partner or distributor (not internal):
API keys — multiple keys, names, revoke
Base path:/api/v1/api-keys
The dashboard API Keys page supports multiple keys, optional names on create, rename, and revoke.
Voice catalog — TTS voices
Base path:/api/v1/tts-voices
Use
GET /api/v1/tts-voices (no trailing slash required).
For interactive request/response shapes, continue to use the Voice Agent API OpenAPI tab and
kupe-voice-agent.openapi.yaml.
