Create a gateway on a SIP trunk
POST
/v1/voice/trunks/{trunk_id}/gateways
const gateway = await bird.voice.trunks.gateways.create("TRUNK_ID", {
sip_uri: "sip:pbx.example.com:5060",
priority: 0,
destination_format: "1234#{number}",
});
console.log(gateway.id, gateway.priority);gateway = client.voice.trunks.gateways.create(
"TRUNK_ID",
sip_uri="sip:pbx.example.com:5060",
priority=0,
destination_format="1234#{number}",
)
print(gateway.id, gateway.priority)gateway, err := client.Voice.Trunks.Gateways.Create(context.Background(), "TRUNK_ID", bird.VoiceTrunksGatewaysCreateParams{
SipURI: "sip:pbx.example.com:5060",
Priority: 0,
DestinationFormat: bird.Ptr("1234#{number}"),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(gateway.Id, gateway.Priority)$gateway = $bird->voice->trunks->gateways->create(
'TRUNK_ID',
(new VoiceTrunkGatewayCreate())
->setSipUri('sip:pbx.example.com:5060')
->setPriority(0)
->setDestinationFormat('1234#{number}'),
);
echo $gateway->getId(), ' ', $gateway->getPriority(), "\n";bird voice trunks gateways create <trunk-id> \
--destination-format '1234#{number}' \
--priority 0 \
--sip-uri sip:pbx.example.com:5060curl -X POST "https://us1.platform.bird.com/v1/voice/trunks/{trunk_id}/gateways" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sip_uri": "sip:pbx.example.com:5060",
"priority": 0,
"destination_format": "1234#{number}"
}'Antwort201
{
"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"
}
Adds a gateway address for forwarding inbound calls to this trunk.
Gateways are tried in priority order, lowest first, until one answers.
Gateways with equal priority share calls evenly. sip_uri identifies the
peer host, while destination_format and origination_format control the
called and calling number formats. Both number formats default to E.164.
A SIP URI already registered on this trunk returns 409 Conflict. An
invalid SIP URI, a SIP URI carrying a user part, or a malformed number
format returns 422. A trunk outside the workspace returns 404 Not Found.
A trunk without inbound calling enabled returns 412 Precondition Failed.
A trunk supports at most 20 gateways. Creating another returns 422; delete a gateway before adding its replacement. SIP ports must be between 1 and 65535.
Parameter
trunk_id
string
Anfrage-Nutzlast
sip_uri
string
erforderlich
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
erforderlich
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. Write 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.
Omit it for 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.
Omit it for 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.
Antwort-Payload
id
string
erforderlich
Unique identifier for this gateway.
trunk_id
string
erforderlich
sip_uri
string
erforderlich
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
erforderlich
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
erforderlich
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
erforderlich
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
erforderlich
updated_at
string
erforderlich
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema. Die Ressourcen sind auf Englisch.
Das Konzept verstehenShould I use a Bird SDK or call the API directly?Dem Lernpfad folgenBuild your first integrationImplementierungsleitfadenSend your first email
Implementierungs-Briefing erhalten