API Reference: REST endpoints, auth, OpenAPI spec
Call2Me REST API — base URL, authentication (JWT + API keys), endpoint groups (agents, calls, knowledge base, widgets, payments, webhooks), and the full OpenAPI spec.
Updated May 1, 2026
Base URL and auth
Base URL: https://api.call2me.app
OpenAPI: https://api.call2me.app/openapi.json
Authentication:
- JWT tokens — for the dashboard and SDK clients. Returned by
POST /v1/auth/login. - API keys — long-lived, for server-to-server. Generate in dashboard → API Keys.
Header for both:
Authorization: Bearer <token-or-key>
Endpoint groups
Call2Me has 156 REST endpoints organized into groups:
Auth
POST /v1/auth/register Register new user
POST /v1/auth/login Login, returns JWT
POST /v1/auth/refresh Refresh JWT
GET /v1/auth/me Current user
POST /v1/auth/logout Logout
Agents
POST /v1/agents Create agent
GET /v1/agents List agents
GET /v1/agents/{id} Get agent
PATCH /v1/agents/{id} Update agent
DELETE /v1/agents/{id} Delete agent
POST /v1/agents/{id}/test-function Test webhook function
Calls
GET /v1/calls List calls
GET /v1/calls/{id} Get call detail
POST /v1/calls/outbound Make outbound call
GET /v1/calls/{id}/recording Download recording
GET /v1/calls/{id}/transcript Get transcript
Knowledge Base
POST /v1/knowledge-base Create KB
GET /v1/knowledge-base List KBs
POST /v1/knowledge-base/{id}/sources Add source
DELETE /v1/knowledge-base/{id}/sources/{src} Delete source
POST /v1/knowledge-base/{id}/query Semantic search
Phone Numbers
GET /v1/phone-numbers List
POST /v1/phone-numbers/buy Buy via Telnyx
POST /v1/phone-numbers/{id}/assign Assign to agent
DELETE /v1/phone-numbers/{id} Release
Widgets
POST /v1/widgets Create widget
GET /v1/widgets/{id}/config Public — config for embed
GET /v1/widgets/{id}/embed.js Public — runtime JS
POST /v1/widgets/{id}/chat Public — send message
GET /v1/widgets/{id}/preview Public — standalone preview
Campaigns
POST /v1/campaigns Create campaign
GET /v1/campaigns List
POST /v1/campaigns/{id}/upload Upload CSV contacts
POST /v1/campaigns/{id}/start Start dialing
POST /v1/campaigns/{id}/pause Pause
GET /v1/campaigns/{id}/results Export results CSV
Schedules
POST /v1/schedules Create scheduled call
GET /v1/schedules List
DELETE /v1/schedules/{id} Cancel
Voice / LiveKit
POST /v1/livekit/token Get LiveKit token for browser voice call
GET /v1/livekit/health LiveKit config check
Payments / Wallet
GET /v1/wallet Current balance
POST /v1/payments/topup Initiate top-up
GET /v1/payments/history Transactions
GET /v1/pricing Public — current pricing
Public utility endpoints (no auth)
GET /v1/pricing Pricing snapshot
GET /v1/branding/{domain} White-label branding lookup
POST /v1/contact Contact form
POST /v1/newsletter/subscribe Newsletter signup
POST /v1/events Client-side event ingest
POST /v1/demo/* Demo call (rate-limited)
Rate limits
- Per-user: 100 requests / minute on authenticated endpoints.
- Per-IP on public endpoints: 30 requests / minute.
- Webhook deliveries: retry with exponential backoff up to 3 times.
When rate-limited, you'll get a 429 Too Many Requests with a Retry-After header.
Webhooks
Configure on AgentDetail → Webhook URL. Events:
call.completed— call ended, full transcript + extracted fields.call.transferred— agent transferred to a human.call.failed— call couldn't connect.campaign.completed— campaign finished.payment.succeeded— top-up landed.
Payload format:
{
"event": "call.completed",
"id": "evt_...",
"ts": "2026-05-01T12:34:56Z",
"data": {
"call_id": "call_...",
"agent_id": "agent_...",
"from": "+90...",
"to": "+90...",
"duration_seconds": 87,
"transcript": "...",
"extracted": { "interested": true, "callback_time": "Tuesday 14:00" }
}
}
Verify with the HMAC signature in the X-Call2Me-Signature header.
SDKs
Official:
- Python —
pip install call2me - TypeScript / JavaScript —
npm install @call2me/sdk
Both wrap the REST API with type-safe clients and handle auth refresh automatically.
OpenAPI spec
Full machine-readable schema:
https://api.call2me.app/openapi.json
Import into Postman, generate clients in any language, or browse the schema directly.
Status and uptime
- Real-time status: status.call2me.app (where available)
- Historical SLA: 99.9% on the API, 99.5% on voice.
Frequently asked
Q.What's the Call2Me API base URL?
https://api.call2me.app — all REST endpoints live under /v1/.
Q.How do I authenticate with the Call2Me API?
Two options: JWT tokens for browser/dashboard sessions, or long-lived API keys (Authorization: Bearer <key>) for server-to-server. Generate keys in the dashboard under API Keys.
Q.Is there an OpenAPI spec?
Yes. https://api.call2me.app/openapi.json — full machine-readable schema for all 156 endpoints under /v1/.
Q.Are there public endpoints I can hit without auth?
Yes. Pricing (/v1/pricing), demo (/v1/demo/*), branding lookup (/v1/branding/), widget embed/chat/preview, contact form, newsletter signup, and event ingest are all public and rate-limited.