---
title: "Attach a number to a SIP trunk"
method: POST
path: "/v1/messaging/phone-numbers/{id}/sip-trunk"
tags: ["Voice"]
---

# Attach a number to a SIP trunk

`POST /v1/messaging/phone-numbers/{id}/sip-trunk`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/phone-numbers/{id}/sip-trunk`
- Auth: HTTP bearer

Routes the number's calls to the trunk: the external platform receives
its inbound directly and can present it as outbound caller ID. While
attached, Zernio-side voice features are off for this number (call
forwarding, IVR, voicemail, recording, the softphone, and WhatsApp
calling), so the number must have Calls and WhatsApp calling disabled
before attaching. SMS and WhatsApp messaging are unaffected.


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

## Path parameters

- `id` string, required: Phone number record ID (from GET /v1/phone-numbers).

## Headers

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

## Request body

- object
  - `trunkId` string, required: SIP trunk ID (from POST /v1/phone-numbers/sip-trunks).

## 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`
    - `trunkId` string
    - `attached` boolean
    - `phoneNumber` string
  - `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)
