---
title: numbers.byo_requires_trunk
description: Adding a customer-owned number requires an active SIP trunk first.
summary: >-
  Returned by POST /v1/numbers/byo when the workspace has no SIP trunk, or its
  trunk has not yet reached active. Connect and verify a trunk before adding
  numbers.
date: 2026-08-06T00:00:00.000Z
type: error
---


## Summary

`numbers.byo_requires_trunk` means `POST /v1/numbers/byo` was refused because the workspace does not have a proven, working SIP trunk yet.

## Cause

A BYO number rides the workspace's own trunk for both signalling and billing, so the trunk has to exist — and be provably working — before a number can be attached to it. This error covers two situations:

- No trunk has been connected at all (`PUT /v1/sip-trunk` was never called).
- A trunk exists but has not reached `active`: a registration trunk still probing or that failed its REGISTER, or a signaling (`ip_allowlist`) trunk still waiting on Sautikit's approval review.

A `pending` or `pending_approval` trunk is deliberately not enough — see [Numbers concepts — the lock fires only once the trunk is confirmed working](/developers/concepts/numbers#bring-your-own-sip-trunk).

## Resolution

Connect a trunk if you have not:

```bash
curl -X PUT "https://api.sautikit.com/v1/sip-trunk" \
  -H "Authorization: Bearer $SAUTIKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"label": "Head office trunk", "auth_mode": "registration", "proxy": "sip.example-carrier.com", "transport": "udp", "username": "sautikit_100", "password": "…"}'
```

Then check its status before retrying:

```bash
curl "https://api.sautikit.com/v1/sip-trunk" \
  -H "Authorization: Bearer $SAUTIKIT_API_KEY"
```

For a registration trunk, `status` moves from `pending` to `active` synchronously during the `PUT` call itself — a `pending`/`failed` result there means the registrar rejected the credentials or was unreachable; correct them and re-`PUT`. For a signaling trunk, `status` stays at `pending_approval` until Sautikit's operations team reviews and approves it — no customer action speeds this up beyond making sure the submitted signalling IPs, media IPs and country code are correct.

## Example response

```json
{
  "error": {
    "code": "numbers.byo_requires_trunk",
    "message": "connect an active SIP trunk before adding your own numbers",
    "request_id": "req_01900000abc"
  }
}
```

## Next steps

- [Numbers concepts — bring your own SIP trunk](/developers/concepts/numbers#bring-your-own-sip-trunk)
- [`sip_trunk.not_found`](/developers/errors/sip_trunk.not_found)
