---
title: "Hang up a live call"
method: POST
path: "/v1/messaging/voice/calls/{id}/end"
tags: ["Voice"]
---

# Hang up a live call

`POST /v1/messaging/voice/calls/{id}/end`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/voice/calls/{id}/end`
- Auth: HTTP bearer

Hangs up a live call on demand, including an outbound call that is
still ringing and has not been answered yet (the callee stops ringing
immediately). Works for PSTN calls and for WhatsApp calls (the `callId`
returned by `POST /v1/whatsapp/calls`, or an inbound WhatsApp call id).
A WhatsApp call forwarded to a `wss://` destination also ends
automatically when that WebSocket closes. Idempotent: ending a call that already
ended (or never connected) returns success with the call's current
status. Final duration/cost are written asynchronously when the hangup
event lands, so the call doc may briefly still show its prior status.


**Billing:** Request; paid actions are priced in credits (see GET /v1/messaging/prices) · **Rate limit:** 60/min

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
    - `callId` string
    - `status` string: `ending` when a hangup was issued; otherwise the call's current status.
    - `success` boolean
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
