Heppu APIv2.heppu.ai/api

Calls

List past calls, check one, cancel one.

List

GET/api/v1/calls

All phone conversations in the org, newest first.

agentIduuid
statusstring
Exact match. completed, failed, no-answer, busy, scheduled, …
directioninbound | outbound
phoneNumberstring
Matches either side of the call.
startDateISO date
endDateISO date
limitint
default 50
offsetint
default 0
sortBycreatedAt | scheduledAt
default createdAt
sortOrderasc | desc
default desc
{
  "data": {
    "calls": [
      {
        "id": "…",
        "status": "completed",
        "direction": "outbound",
        "scheduledAt": "…",
        "duration": 42,
        "outcome": "resolved",
        "twilioCallSid": "CA…",
        "agent": { "id": "…", "name": "Collections" },
        "contact": { "phone": "+358…", "name": "…", "email": "…" },
        "phoneNumber": "+358…",
        "createdAt": "…"
      }
    ],
    "pagination": { "total": 137, "limit": 50, "offset": 0, "hasMore": true }
  },
  "meta": { "timestamp": "…" }
}

Two id spaces

Ids from this list are conversation ids. The detail endpoint below reads call log ids, which come from POST /v1/calls/outbound. Don't feed a list id into the detail endpoint, it 404s. Use webhooks for per-call results instead.

Get one

GET/api/v1/calls/{callId}

For calls placed via outbound. Shows dial progress while the call is live.

{
  "data": {
    "id": "V1StGXR8_Z5jdHi6B-myT",
    "status": "active",
    "direction": "outbound",
    "phoneNumber": "+358…",
    "duration": null,
    "startedAt": "…",
    "endedAt": null,
    "failureReason": null,
    "agent": { "id": "…", "name": "…", "type": "voice" },
    "summary": null,
    "transcript": null,
    "metadata": { "caller_id": "+358…" },
    "liveRoomStatus": { "roomExists": true, "numParticipants": 2 },
    "createdAt": "…",
    "updatedAt": "…"
  },
  "meta": { "timestamp": "…" }
}

Status walks queuedinitiatedconnectingringingactivecompleted | failed | cancelled.

Cancel

DELETE/api/v1/calls/{callId}

Only while initiated, connecting, ringing or active. Hangs up if connected. 400 otherwise with Cannot cancel call with status: completed.

{ "data": { "id": "…", "status": "cancelled" }, "meta": { "message": "Call cancelled successfully", "timestamp": "…" } }

On this page