Getting started
Base URL
https://convostack.ai/api
Authentication
If you're integrating from outside Meldcore's own infrastructure, use an API key, not a login token. Generate one from the dashboard:
Settings → API Keys → Generate new key.
The raw key is shown exactly once — copy it somewhere safe (a secrets manager, an env var). If you lose it, revoke it and generate a new one; there is no way to retrieve a lost key.
Send it as a bearer token on every request:
curl https://convostack.ai/api/agents \
-H "Authorization: Bearer cak_live_..."
An API key is scoped to the organization that created it. Every call you make with it sees and affects only that organization's data — agents, calls, credits, everything — the same as if you'd logged into the dashboard as that org.
Settings → API Keys → Revoke on the key you no longer trust. Revocation
is immediate — the very next request with that key returns 401.
Internal Meldcore auth (not for external integrations)
ConvoStack also accepts the standard Meldcore session bearer token (the same one the dashboard uses):
curl https://convostack.ai/api/agents \
-H "Authorization: Bearer $ACCESS_TOKEN"
This session token is for the dashboard, not external integrations — use an API key instead.
Your first call
A minimal, complete round trip: create an agent, then place a call through it.
# 1. Create an agent
curl -X POST https://convostack.ai/api/agents \
-H "Authorization: Bearer cak_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Support Bot",
"firstMessage": "Hi, thanks for calling — how can I help?",
"systemPrompt": "You are a friendly support agent for Acme Inc."
}'
# → { "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "draftVersionNumber": 1, ... }
# 2. Publish it — the draft becomes the live version
curl -X POST https://convostack.ai/api/agents/a1b2c3d4-5678-90ab-cdef-1234567890ab/publish \
-H "Authorization: Bearer cak_live_..."
# 3. Place an outbound call through it
curl -X POST https://convostack.ai/api/phone/call \
-H "Authorization: Bearer cak_live_..." \
-H "Content-Type: application/json" \
-d '{
"phoneNumber": "+15551234567",
"agentId": "a1b2c3d4-5678-90ab-cdef-1234567890ab"
}'
# → { "callSid": "CA...", "status": "call_initiated", "fromNumber": "+1...", "callId": "..." }
Agents are created as a draft — see Agents for the draft/publish lifecycle and why it exists.
Trying the API interactively
The API Reference is interactive — every endpoint has a Test Request button that issues a real call from your browser. Paste your API key into the auth panel first (the lock icon on any endpoint).
What's next
- Authentication — API key scopes, rotation, and what a key can and can't do
- Agents — the draft/publish model, presets, and tool binding
- Calls & campaigns — placing one call vs. running a campaign against many numbers
- Errors — the error response shape and how to handle it
- Rate limits — per-org throttling, especially on call-placing endpoints