early-boots-90383
12/19/2025, 1:06 PMtall-airline-16756
12/19/2025, 1:06 PMtall-airline-16756
12/19/2025, 1:06 PMaction field must be one of two wrapped action types: update (for partial updates) or replace (to fully replace the trunk). Right now your body is missing that wrapper.
Try one of these formats:
1) Partial update (recommended — adds the number)
{
"sip_trunk_id": "ST_D7wTpXYYax",
"action": {
"update": {
"name": "Inbound Staging trunk",
"numbers": {
"add": [
"+5531984521348"
]
}
}
}
}
2) Replace entire trunk (must include all required fields)
{
"sip_trunk_id": "ST_D7wTpXYYax",
"action": {
"replace": {
"name": "Inbound Staging trunk",
"numbers": ["+5531984521348"]
/* include any other required SIPInboundTrunkInfo fields here */
}
}
}
If you want, paste the exact request (headers and JSON body) you're sending and I’ll check it and give a ready-to-run cURL example.
Sources: SIP APIs | LiveKit docsearly-boots-90383
12/19/2025, 1:13 PMtall-airline-16756
12/19/2025, 1:13 PMaction.update wrapper is correct. Two likely issues to check that will fix the request:
1) Remove the tel-style markdown/brackets from the number. Send plain E.164 number strings:
"add": ["+5531984521348"]
2) Ensure the JSON body is sent without backslash-escaped underscores or extra quoting the CLI might add. Full working curl example:
curl --location '<https://oppy-9z7095df.livekit.cloud/twirp/livekit.SIP/UpdateSIPInboundTrunk>' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9' \
--header 'Content-Type: application/json' \
--data '{
"sip_trunk_id": "ST_7wTRXYYaxY",
"action": {
"update": {
"numbers": {
"add": ["+5531984521348"]
}
}
}
}'
If you still get the same error after using that exact payload, please paste the full error response and confirm:
• The token has the required scope for SIP trunk updates.
• The trunk ID ST_7wTRXYYaxY is correct and active.
I’ll continue helping once you confirm or share the updated error.early-boots-90383
12/19/2025, 1:14 PMtall-airline-16756
12/19/2025, 1:15 PMaction.update payload. Let’s narrow this down.
Please provide the following (you can redact secrets like the full token string):
1. The full HTTP response body and status code you get now (paste exact JSON).
2. Confirm the token’s grants/scopes (does it include sip.admin?). If you can’t show the token, paste the decoded JWT payload (just the claims).
3. Confirm the trunk ID is correct (ST_7wTRXYYaxY) and that the trunk appears in your ListSIPInboundTrunk results.
4. Any other fields you’re attempting to update in the same request.
Quick checks you can run now:
• Run ListSIPInboundTrunk with the same token to verify the trunk exists.
• Try a minimal update that only changes a non-array field, e.g. name:
{
"sip_trunk_id": "ST_7wTRXYYaxY",
"action": {
"update": {
"name": "TestName"
}
}
}
If that works but adding numbers.add fails, paste the ListSIPInboundTrunk output so I can confirm the numbers field shape.
Send the items above and I’ll pinpoint the cause and provide an exact cURL or payload fix.
Sources: SIP APIs | LiveKit docs