sip_trunk.already_exists
This workspace already has a SIP trunk, so it cannot be connected again.
sip_trunk.already_exists means POST /v1/sip-trunk was called on a workspace that already has a trunk connected. A workspace has exactly one.
POST connects a trunk; it does not replace one. That refusal is deliberate rather than pedantic.
A create aimed at a workspace that already has a trunk is almost always a mistake about which workspace, not a request to swap carriers mid-flight. Had it replaced the existing trunk, two things would happen quietly: calls in progress on the old trunk would drop, and an ip_allowlist trunk that an operator had already approved would fall back to pending_approval — taking a working connection offline until someone approved it again.
Nothing is written when this is returned. The existing trunk is untouched.
To change the trunk you already have, use PUT:
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", "auth_username": "u", "password": "…"}'To see what is currently connected:
curl "https://api.sautikit.com/v1/sip-trunk" \
-H "Authorization: Bearer $SAUTIKIT_API_KEY"To genuinely start over — for instance when moving to a different carrier — disconnect first. That requires releasing any BYO numbers riding the trunk, which is what sip_trunk.in_use guards.
sip_trunk.not_found — no trunk is connected yet.sip_trunk.in_use — numbers still ride the trunk.