---
title: "End a voice session"
method: POST
path: "/api/v1/voice/sessions/{id}/end"
tags: ["Voice"]
---

# End a voice session

`POST /api/v1/voice/sessions/{id}/end`

## Request

- Base URL: `https://your-deployment.example.com`
- URL: `https://your-deployment.example.com/api/v1/voice/sessions/{id}/end`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Reconciles the credit reservation taken by `POST /api/v1/voice/sessions` down to the actual call duration and refunds the difference. Call it when the conversation ends. Idempotent: once the hold is cleared, a repeat call refunds nothing and reports `alreadyReconciled: true`. Only the session owner can end a call. `POST /api/voice/v2/sessions/{id}/end` is a legacy alias of this endpoint. Authenticate with an API key (`b4m_live_`) or a JWT.

## Path parameters

- `id` string, required: The session id returned by `POST /api/v1/voice/sessions`.

## Response `200`

The reservation is reconciled.

- EndVoiceSessionResponse200
  - `refunded` number, required: Credits returned to the caller from the up-front reservation.
  - `elapsedSeconds` integer: Billed call duration. Absent when the session had already been reconciled.
  - `alreadyReconciled` true: Present when there was no live hold left to reconcile; the call is a no-op.

## Other responses

- `401`: Missing or invalid credentials.
- `403`: The API key does not hold any of the required scopes.
- `404`: No session with that id is owned by the caller (a malformed id is also a 404).
- `405`: The path does not serve this HTTP method.
- `422`: Request failed validation.

---

[API](https://skmtc.dev/bike4mind/apis/bike4mind-api.md) · [All operations](https://skmtc.dev/bike4mind/apis/bike4mind-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bike4mind/apis/bike4mind-api/revisions/d437aaac22ac?raw)
