numbers.extension_taken
Another active SIP credential in this workspace already uses that extension.
numbers.extension_taken means another active SIP credential in this workspace already answers to that extension.
An extension is unique across the workspace, not across the number. That is deliberate: the workspace is the namespace people dial within, so 1001 has to mean one device no matter which of your numbers each device was issued against. Two credentials sharing an extension would make a dialled number ambiguous, and there is no sensible way to pick between them.
Uniqueness is enforced by a database index rather than a check-then-write, so two requests claiming the same extension at the same moment cannot both succeed. One of them receives this error.
Pick a free extension, or free the one you want.
To see what is in use, list the credentials on each of your numbers — the response carries extension on every credential:
curl "https://api.sautikit.com/v1/numbers/{id}/sip-credentials" \
-H "Authorization: Bearer $SAUTIKIT_API_KEY"To move an extension between devices, clear it from the old one first by passing an empty string:
curl -X PATCH "https://api.sautikit.com/v1/numbers/{id}/sip-credentials/{old_cred_id}" \
-H "Authorization: Bearer $SAUTIKIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"extension": ""}'Revoking a credential also frees its extension, so a replaced handset's number can be reissued without any extra step.
numbers.extension_invalid — the extension is not exactly four digits.