number.provisioned
Fires when a phone number is claimed from inventory and assigned to the workspace.
number.provisioned fires when a DID is claimed from inventory and assigned to the workspace. This event was previously published as number.assigned; the wire string was renamed to number.provisioned in the frontend-alignment wave. Subscriptions using the old number.assigned literal must be updated; the validator returns webhooks.event_unsupported for the old name.
This event is subscribable via workspace webhooks (POST /v1/webhooks).
{
"kind": "number.provisioned",
"event_id": "01900000-0000-7000-8000-000000000001",
"workspace_id": "01900000-0000-7000-8000-000000000002",
"occurred_at": "2026-06-27T10:00:00.000Z",
"data": {
"number_id": "01900000-0000-7000-8000-000000000003",
"e164": "+254700000001",
"country_code": "KE",
"capabilities": ["voice", "sms"],
"series_id": "01900000-0000-7000-8000-000000000004",
"rental_start_at": "2026-06-27T10:00:00.000Z"
}
}Every webhook delivery includes the following request headers:
| Header | Description |
|---|---|
X-Sautikit-Signature | HMAC-SHA256 of the raw body, hex-encoded. Verify with your subscription secret. |
X-Sautikit-Idempotency-Key | Unique delivery ID for deduplication. |
X-Sautikit-Event | Literal event kind: number.provisioned. |
event_id or the X-Sautikit-Idempotency-Key header.dead_letter.import { createHmac } from "node:crypto";
export async function POST(req) {
const sig = req.headers["x-sautikit-signature"];
const body = await req.text();
const expected = createHmac("sha256", process.env.WEBHOOK_SECRET)
.update(body)
.digest("hex");
if (sig !== expected) return new Response("Forbidden", { status: 403 });
const event = JSON.parse(body);
if (event.kind === "number.provisioned") {
const { number_id, e164, capabilities } = event.data;
console.log(`Number provisioned: ${e164} (${number_id}), capabilities: ${capabilities.join(", ")}`);
// update internal phone book, configure routing...
}
return new Response("OK", { status: 200 });
}events: ["number.provisioned"].number.released to track full number lifecycle.