> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telloai.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 통화 종료

> 진행 중인 통화의 종료를 요청하고, 상세 조회로 실제 종료를 확인해요.

## 할 수 있는 일

인증한 계정의 진행 중인 통화를 종료하도록 요청해요. REST API로 만든 통화뿐 아니라
`source`가 `a2a`·`sdk`인 통화도 종료할 수 있어요. 통화 id만 있으면 되고 별도 세션이나
태스크 id는 필요 없어요.

```http theme={null}
POST https://api.telloai.io/v1/calls/{callId}/end
```

## 파라미터

| 이름 | 위치 | 필수 | 설명 |
| - | - | - | - |
| `callId` | 경로 | 필수 | 종료할 통화의 `c_12345` 형식 id예요 |

요청 본문은 필요 없어요.

```bash theme={null}
curl --request POST "https://api.telloai.io/v1/calls/c_12345/end" \
  --header "Authorization: Bearer <API_KEY>"
```

## 결과

성공하면 **`202 Accepted`와 접수 시점의 통화 객체**가 와요. 별도의 `data` 봉투는 없어요.
필드 구성은 [통화 상세](https://docs.telloai.io/developer/rest/get-call.md)와 같아요.

```json 202 예시 theme={null}
{
  "id": "c_12345",
  "status": "inProgress",
  "direction": "outbound",
  "source": "api",
  "agentId": "12",
  "crewId": null,
  "createdAt": "2026-10-20T01:00:00.000Z",
  "startedAt": "2026-10-20T01:00:08.000Z",
  "endedAt": null,
  "durationSeconds": null,
  "endReason": null,
  "transcript": null,
  "summary": null,
  "creditCharged": null
}
```

> [!WARNING]
>
> `202`는 종료 요청을 접수했다는 뜻이에요. 응답의 `status`는 여전히 `dialing`·`inProgress`·
> `transferring`일 수 있고, `endedAt`도 아직 `null`일 수 있어요. **통화 상세를 다시 조회해 실제
> 종료를 확인하세요.** 종료 요청과 자연 종료가 겹치면 최종 결과가 다를 수 있어요.

```bash 종료 여부 확인 theme={null}
curl "https://api.telloai.io/v1/calls/c_12345" \
  --header "Authorization: Bearer <API_KEY>"
```

## 종료할 수 있는 통화

* `source`가 \*\*`api`·`a2a`·`sdk`\*\*인 통화만 종료할 수 있어요.
* `mcp`·`sip`·`webrtc` 등 다른 출처의 진행 중인 통화는 조회할 수 있어도 이 엔드포인트로
  종료할 수 없어요. `409 call_control_unsupported`가 와요.
* `completed`·`noAnswer`·`failed`·`cancelled`는 이미 끝난 상태예요. 다시 종료하면
  `409 call_not_active`가 와요. 끝난 통화는 출처를 따지기 전에 이 오류로 응답해요.
* 전환으로 파생된 통화와 포털 테스트 통화는 대상이 아니에요.
* 다른 계정의 통화, 없는 id, 잘못된 형식은 모두 `404 call_not_found`예요.

## 취소와 과금

이 요청으로 취소가 반영되면 공개 `status`는 **`cancelled`**, `endReason`은 `cancelled`로
보여요. 상대가 받기 전 취소는 통화 요금이 부과되지 않지만, **받은 뒤에 종료하면 통화한
시간에 따른 요금이 부과돼요.** 두 경우의 공개 상태는 같으므로 상태만으로 과금을 판단하지
마세요.

통화가 끝난 뒤 `startedAt`·`durationSeconds`·`creditCharged`를 확인하세요. 집계가 아직 끝나지
않았으면 관련 값이 `null`일 수 있어요.

## 오류

| HTTP | 코드 | 대처 |
| - | - | - |
| `401` | `unauthenticated` | API 키를 확인하세요 |
| `404` | `call_not_found` | 현재 계정의 통화 id인지 확인하세요 |
| `409` | `call_not_active` | 이미 끝났으니 상세에서 최종 결과를 조회하세요 |
| `409` | `call_control_unsupported` | 이 출처가 제공하는 종료 방법을 사용하세요 |

그 밖의 오류는 [REST 오류](https://docs.telloai.io/developer/rest/errors.md)를 보세요.

## 관련 문서

* [통화 상세](https://docs.telloai.io/developer/rest/get-call.md)
* [통화 목록](https://docs.telloai.io/developer/rest/list-calls.md)
* [통화 생성](https://docs.telloai.io/developer/rest/create-call.md)
* [통화 전환](https://docs.telloai.io/developer/rest/transfer-call.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.