API docs

Calls

A call is one phone conversation (inbound or outbound). All endpoints are workspace-scoped and require read access. Pagination everywhere: ?limit= (default 25, max 100) and ?starting_after=<id>; responses are {"data":[…],"has_more":bool} ordered newest first.

List calls — GET /v1/calls

Filters: status, direction (inbound|outbound), agent_id, contact_id, external_ref, created_after, created_before (ISO 8601).

curl -H "Authorization: Bearer $VCA_API_KEY" \
  "https://api.voicecallingai.com/v1/calls?direction=outbound&limit=2"

Returns light call objects: id, direction, from, to, status, agent_id, contact_id, outcome, talk_seconds, created_at, external_ref.

Get a call — GET /v1/calls/{id}

The full object (real example, numbers masked):

{
  "call_id": "b4222a3f-b422-4b09-b5a7-f721287dbc4c",
  "direction": "inbound",
  "from": "+91XXXXX22338",
  "to": "+912264230136",
  "agent_id": "c071a030-8601-4e73-bfb2-872d49b42f38",
  "contact_id": "6fec7323-9c4e-4d2a-8c11-2f1b6f3f2a10",
  "campaign_id": null,
  "status": "completed",
  "hangup_cause": "normal_clearing",
  "timings": {
    "queued_at": "2026-06-04T14:01:00Z", "dialed_at": "2026-06-04T14:01:01Z",
    "answered_at": "2026-06-04T14:01:01Z", "ended_at": "2026-06-04T14:02:40Z",
    "ring_seconds": 0, "talk_seconds": 99, "total_seconds": 100
  },
  "credits_charged": null,
  "outcome": "demo_booked",
  "disposition": null,
  "summary": {
    "outcome": "demo_booked",
    "confidence": 0.9,
    "next_action": "Send a reminder for the demo scheduled for tomorrow at 5 PM.",
    "business_type": "jewelry",
    "customer_name": "Harsh",
    "key_interests": ["WhatsApp marketing tool", "free trial"],
    "key_objections": [],
    "scheduled_for": "2026-06-05T17:00:00+05:30"
  },
  "external_ref": null
}

Notes: credits_charged, outcome, disposition, summary are null until/unless applicable. recording_url and transcript keys appear only when available (coming soon). The same object is the data of the call.completed webhook.

Transcript / recording — GET /v1/calls/{id}/transcript · GET /v1/calls/{id}/recording

Coming soon — currently 404 transcript_not_available / 404 recording_not_available. The recording endpoint will return {"url": "<signed URL>", "expires_in": 3600}.