HCC Docs

Webhook endpoints

List webhook endpoints, newest first

GET /v1/webhook-endpoints webhooks:read

Query

  • limit integer
  • cursor string

Responses

  • 200

    A page of webhook endpoints

    Fields
    • data WebhookEndpoint[] required
      Fields
      • id string required
      • url string required
      • description string | null required
      • eventTypes string[] required
      • enabled boolean required
      • createdAt string | null required
    • nextCursor string | null required
  • 400

    Invalid request

  • 401

    Missing or invalid API key

  • 404

    Not found

  • 429

    rate_limited, or another limit named by error.code

Create a webhook endpoint (returns its signing secret once)

POST /v1/webhook-endpoints webhooks:write

Live keys only: an endpoint receives Events from both environments.

Headers

  • Idempotency-Key string

    Makes the request safe to retry. For 24h, a request with the same key and body replays the stored response (with Idempotent-Replayed: true); the same key with a different request is a 422 idempotency_key_reused, and while the first request is still running a 409 idempotency_key_in_use. Server errors, 409s and 429s are not stored.

Body

  • url string required
  • eventTypes "call.initiated" | "call.ringing" | "call.answered" | "call.status.changed" | "call.completed" | "call.gather.completed" | "call.recording.ready" | "call.recording.started" | "call.recording.paused" | "call.recording.resumed" | "call.recording.stopped" | "call.transcript.ready" | "call.transcript.failed" | "call.flow.fallback" | "call.transfer.started" | "call.transfer.completed" | "call.transfer.failed" | "call.participant.joined" | "call.participant.left" | "call.participant.held" | "call.participant.unheld" | "rep.state.changed" | "rep.help.requested" | "rep.offer.missed" | "rep.phone.verified" | "queue.call.entered" | "queue.call.answered" | "queue.call.abandoned" | "queue.call.reassigned" | "call.monitor.started" | "call.monitor.changed" | "call.monitor.ended" | "call.monitor.took_over" | "call.consult.started" | "call.consult.connected" | "call.consult.merged" | "call.consult.ended" | "billing.dials_stopped" | "billing.dials_resumed" | "billing.payment_failed" | "campaign.paused" | "campaign.lead_exited" | "lead.consent.recorded" | "lead.consent.revoked" | "disposition.recorded" | "call.ai_summary.set" | "conversation.transcript.ready" | "webhook.test"[]

    Default [].

  • description string | null

Responses

  • 201

    Webhook endpoint created

    Fields
    • data any required
  • 400

    Invalid request

  • 401

    Missing or invalid API key

  • 403

    A test key (live_mode_only): this change needs a live API key

  • 404

    Not found

  • 409

    idempotency_key_in_use: a request with this key is still running

  • 422

    idempotency_key_reused: this key was used with a different request

  • 429

    rate_limited, or another limit named by error.code

Delete a webhook endpoint

DELETE /v1/webhook-endpoints/{id} webhooks:write

Live keys only.

Path

  • id string required

Responses

  • 204

    Deleted

  • 400

    Invalid request

  • 401

    Missing or invalid API key

  • 403

    A test key (live_mode_only): this change needs a live API key

  • 404

    Not found

  • 429

    rate_limited, or another limit named by error.code