# Update a SIP trunk gateway

`PATCH /v1/voice/trunks/{trunk_id}/gateways/{gateway_id}`

Updates the gateway's `sip_uri`, its `priority`, either number format, or any
combination. Omitted fields stay unchanged; sending an empty string for a
number format returns it to E.164.

An updated SIP URI that collides with another gateway on this trunk returns
`409 Conflict`. An empty body or invalid field returns `422`. A trunk or
gateway outside the workspace returns `404 Not Found`. A trunk without
inbound calling enabled returns `412 Precondition Failed`.

## Code samples

**TypeScript**

```ts
const gateway = await bird.voice.trunks.gateways.update("TRUNK_ID", "GATEWAY_ID", {
  priority: 10,
});
console.log(gateway.id, gateway.priority);
```

Examples: [TypeScript](/docs/api/reference/update-voice-trunk-gateway.ts.md) · [Python](/docs/api/reference/update-voice-trunk-gateway.py.md) · [Go](/docs/api/reference/update-voice-trunk-gateway.go.md) · [PHP](/docs/api/reference/update-voice-trunk-gateway.php.md) · [CLI](/docs/api/reference/update-voice-trunk-gateway.cli.md) · [MCP](/docs/api/reference/update-voice-trunk-gateway.mcp.md) · [cURL](/docs/api/reference/update-voice-trunk-gateway.curl.md)

## Example response `200`

```json
{
  "id": "vtg_01krdgeqcxet5s7t44vh8rt9mg",
  "trunk_id": "spt_01krdgeqcxet5s7t44vh8rt9mg",
  "sip_uri": "sip:pbx.example.com:5060",
  "priority": 0,
  "origination_format": "+{number}",
  "destination_format": "+{number}",
  "created_at": "2026-05-20T09:14:52Z",
  "updated_at": "2026-05-25T16:42:01Z"
}
```

## Path parameters

- `trunk_id` (string)
- `gateway_id` (string)

## Request body

- `sip_uri` (string): SIP URI an inbound call to this trunk should be forwarded to. Give the host only, with an optional port: which number is dialed there comes from `destination_format`, so a URI carrying a user part is rejected.
- `priority` (integer): The order gateways are tried in, lowest first. Give two gateways the same priority to share calls between them evenly.
- `origination_format` (string)

  How this gateway wants the calling number spelled, as a template whose
  `{number}` stands for the number without its leading `+`. The result is
  stated in the `P-Asserted-Identity` header of the delivered call.

  Send an empty string to go back to E.164, which is `+{number}`. The template
  may add digits, letters and the characters `-_.!~*'()&=+$,;?/%#` around
  `{number}`, which may appear at most once, and anything else in braces is
  rejected so a misspelled placeholder cannot reach a call.

  A format with no `{number}` at all states the same identity on every call,
  which is what a peer that only accepts one authorized number wants. The
  call then carries nothing about who really called.
- `destination_format` (string)

  How this gateway formats the dialed number. In the template, `{number}`
  represents the number without its leading `+`. The result is placed before
  the `sip_uri` host. For example, `1234#{number}` formats `+31201234567` as
  `sip:1234#31201234567@pbx.example.com:5060`.

  Send an empty string to go back to E.164, which is `+{number}`. A format
  with no `{number}` at all sends every number this trunk answers to one fixed
  number, so `777000447973` reaches `sip:777000447973@pbx.example.com:5060`
  whatever was dialed. The same rules as `origination_format` apply to what
  the template may contain.

## Response body

- `id` (string, required): Unique identifier for this gateway.
- `trunk_id` (string, required)
- `sip_uri` (string, required): SIP URI an inbound call to this trunk is forwarded to. The host only: which number is dialed at that host comes from `destination_format`, because it changes with every call.
- `priority` (integer, required): The order gateways are tried in, lowest first. Gateways sharing a priority take an equal share of calls, and any of them may be tried first on a given call.
- `origination_format` (string, required)

  How the calling number is spelled to this gateway, as a template whose
  `{number}` stands for the number without its leading `+`. It is stated
  in the `P-Asserted-Identity` header of the delivered call.

  A gateway that has not asked for anything else reports `+{number}`,
  which is E.164. A format with no `{number}` states that same identity on
  every call, whoever called.
- `destination_format` (string, required)

  How this gateway formats the dialed number. In the template,
  `{number}` represents the number without its leading `+`. The result
  is placed before the `sip_uri` host. For example, `1234#{number}`
  formats `+31201234567` as
  `sip:1234#31201234567@pbx.example.com:5060`.

  A gateway that has not asked for anything else reports `+{number}`,
  which is E.164. A format with no `{number}` is dialed as it stands, so
  every number the trunk answers reaches that one number.
- `created_at` (string, required)
- `updated_at` (string, required)

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
