Update a number's WhatsApp call settings
Writes call hours, icon visibility, callback permission, and voicemail behaviour to Meta, then persists what was written.
Synchronous — unlike enable/rotate, this returns 200 only after
Meta has accepted the write. The write never includes
calling.sip, so it cannot disturb the provisioned trunk.
Authorization
bearerAuth Long-lived ES256 JWT minted from the dashboard (https://app.sautikit.com/developers/api-keys). Signed by the
platform keyring. Carries workspace_id and scopes claims;
revoked via the platform deny-list.
In: header
Path Parameters
The tenant NUMBER id.
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The non-SIP half of Meta's calling settings object for a WhatsApp
number. Writing these NEVER touches calling.sip — the block that
carries the trunk itself — so call-settings writes cannot clobber
provisioning. Every field is optional; omitted fields are left as-is
at Meta.
Response Body
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/numbers/497f6eca-6276-4993-bfeb-53cbbbba6f08/whatsapp/call-settings" \ -H "Content-Type: application/json" \ -d '{ "call_icon_visibility": "DEFAULT", "call_hours": { "status": "ENABLED", "timezone_id": "Africa/Nairobi", "weekly_operating_hours": [ { "day_of_week": "MONDAY", "open_time": "0800", "close_time": "1730" } ] } }'{ "call_settings": { "status": "string", "call_icon_visibility": "string", "call_icons": { "restrict_to_user_countries": [ "KE", "US" ] }, "call_hours": { "status": "string", "timezone_id": "Africa/Nairobi", "weekly_operating_hours": [ { "day_of_week": "MONDAY", "open_time": "0800", "close_time": "1730" } ], "holiday_schedule": [ { "date": "2026-12-25", "start_time": "0900", "end_time": "1200" } ] }, "callback_permission_status": "string", "voicemail": { "status": "string", "triggers": [ "string" ], "announcement_media_id": 0, "timeout_seconds": 0 }, "audio_additional_codecs": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}Get a number's WhatsApp call settings GET
Returns the settings SautiKit last persisted (`stored`) plus a best-effort LIVE read from Meta (`live`) and any Meta-imposed `restrictions`. The live read is best-effort by design: if it fails, the endpoint still returns `200` with `stored` and puts the reason in `live_error` rather than failing the whole request. Treat `stored` as always present and `live` as a bonus.
Toggle recording for a number's WhatsApp calls PUT
Sets the SautiKit-side "record WhatsApp calls" flag. This is a SautiKit setting, not a Meta one: Meta's native call recording is available only on its Cloud/WebRTC calling path, which a BYOC SIP integration cannot use, so recording is captured on our own SIP media leg instead.