You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
E911 comes to the native REST API (/api/relay/rest, signalwire-rest/relay-rest/), native-shaped (not a Twilio clone — that's the compat/LaML track). Two pieces:
Addresses gain carrier E911 validation + full CRUD (Slice A, prime-rails#9565, merged).
Phone numbers gain per-number E911 assign / status / remove (Slice B, prime-rails#9575, in review).
Note
TypeSpec/OpenAPI drafted in docs PR #505. Slice A is merged in prime-rails; Slice B is in review — not yet deployed.
Authentication & scope
Auth: HTTP Basic — Project ID (username) + API token (password).
Required scope:numbers.
Base URL:https://<your-space>.signalwire.com/api/relay/rest
Endpoints
Method
Path
Description
POST
/addresses
Create an address; emergency_enabled=true (US) validates at the carrier.
POST
/addresses/{id}(PUT)
New — update an address (same validation gating).
GET
/addresses / /addresses/{id}
List / fetch (now include E911 fields).
DELETE
/addresses/{id}
Delete.
POST
/phone_numbers/{id}/e911_address
New — assign a validated address → provision.
DELETE
/phone_numbers/{id}/e911_address
New — remove (active-only) → deprovision.
GET
/phone_numbers/{id}
Now includes e911_status.
Behavior & limitations
Address validation is parameter-gated. It runs only when emergency_enabled=true AND country=US. Otherwise the address is stored without carrier validation. auto_correct_address (default true) stores a carrier correction; false rejects with the correction returned as candidates.
Validation failure → 422 with an errors array and, when the carrier returns near-matches, a candidates array (each: street_number, street_name, city, state, postal_code).
Assigning an address to a number is asynchronous.e911_status goes pending; a background job flips it to active only once the carrier confirms — never trusted from the order response or a billing flag (safety requirement).
Removal is active-only and asynchronous: e911_status goes pending_removal; the address stays associated until the carrier confirms teardown.
Fields
Address (response)
Field
Type
Notes
emergency_enabled
boolean
E911 enabled for this address.
validated
boolean
Carrier returned a valid / auto-corrected match.
validated_at
string | null
ISO 8601 of the last successful validation.
Address (writable, create + update)
Field
Type
Notes
emergency_enabled
boolean
Gate carrier validation (US only).
auto_correct_address
boolean
Default true; store correction vs. return candidates.
Native REST error shape ({ errors: [...] } via the standard validation error). E911-specific: address not in project / not validatable → 422; assign to unsupported provider or toll-free → 422; remove while not active → 422.
OpenAPI
See docs PR #505 (referenced, not pasted inline, to avoid drift).
references https://github.com/signalwire/cloud-product/issues/19835 and https://github.com/signalwire/cloud-product/issues/20062
Summary
E911 comes to the native REST API (
/api/relay/rest,signalwire-rest/relay-rest/), native-shaped (not a Twilio clone — that's the compat/LaML track). Two pieces:Note
TypeSpec/OpenAPI drafted in docs PR #505. Slice A is merged in prime-rails; Slice B is in review — not yet deployed.
Authentication & scope
numbers.https://<your-space>.signalwire.com/api/relay/restEndpoints
POST/addressesemergency_enabled=true(US) validates at the carrier.POST/addresses/{id}(PUT)GET/addresses//addresses/{id}DELETE/addresses/{id}POST/phone_numbers/{id}/e911_addressDELETE/phone_numbers/{id}/e911_addressGET/phone_numbers/{id}e911_status.Behavior & limitations
emergency_enabled=trueANDcountry=US. Otherwise the address is stored without carrier validation.auto_correct_address(defaulttrue) stores a carrier correction;falserejects with the correction returned ascandidates.422with anerrorsarray and, when the carrier returns near-matches, acandidatesarray (each:street_number,street_name,city,state,postal_code).e911_statusgoespending; a background job flips it toactiveonly once the carrier confirms — never trusted from the order response or a billing flag (safety requirement).active-only and asynchronous:e911_statusgoespending_removal; the address stays associated until the carrier confirms teardown.Fields
Address (response)
emergency_enabledvalidatedvalidated_atAddress (writable, create + update)
emergency_enabledauto_correct_addressPhone number (response)
e911_statuspending/active/failed/pending_removal/unregistered.Assign request
e911_address_idError codes to document
Native REST error shape (
{ errors: [...] }via the standard validation error). E911-specific: address not in project / not validatable →422; assign to unsupported provider or toll-free →422; remove while notactive→422.OpenAPI
See docs PR #505 (referenced, not pasted inline, to avoid drift).