SiteCallDevelopers

E911

Every calling endpoint has a place 911 can find.

A browser or an SDK app without cellular can only reach 911 through SiteCall, so each endpoint carries a dispatchable location. On a phone, hand 911 to the phone's own dialer instead.

On a phone, always dial 911 with the system dialer (tel:911): it goes over cellular with the handset's own location. SiteCall's VoIP 911 path is for endpoints with no cellular radio.

Is 911 routed through SiteCall yet?

E911 routing is switched on per deployment by SiteCall. GET /api/v1/emergency-locations/resolve tells an endpoint where it stands:

FieldMeaning
routingEnabled911 and 933 route through SiteCall. False: they are refused (emergency_unavailable); use a phone's dialer.
outboundEnabledFalse only while routing is on and the endpoint has no dispatchable location: outbound calls are refused (emergency_location_required) until it has one.
locationThe location this endpoint resolves to, or null.

Which location an endpoint uses

The most specific one the carrier has not rejected:

  1. one device's own location (by its install id);
  2. a member's or an application user's own location;
  3. the workspace's location: an address an owner typed, else its registered business address, which SiteCall validates and seeds.

Set a location

PUT /api/v1/emergency-locations (scope devices:*). A token sets its own subject's locations (its user, member or device); your key may set any target in a workspace you manage. The address is validated by the carrier before it is stored; one it cannot validate is a 422 emergency_address_invalid. The stored address is the carrier's normalized one.

PUT /api/v1/emergency-locations

await asUser.emergencyLocations.set({
  target: { kind: "device", deviceId: "web_8b1f…" },
  address: {
    streetAddress: "500 E 5th St",        // starts with the house number
    extendedAddress: "Suite 210",         // optional: suite, floor, room
    locality: "Austin",
    administrativeArea: "TX",
    postalCode: "78701",
    countryCode: "US",                    // US, CA or PR
  },
  callbackNumber: "+15125550100",         // optional: a workspace number
  callerName: "Acme Roofing",             // optional
});

Targets are { kind: "workspace" }, { kind: "member", memberId? }, { kind: "user", userId? } and { kind: "device", deviceId, memberId?, userId? }; an id left out means the token's own subject. The web SDK's setEmergencyLocation and the React Native SDK's do the device form for you. providerStatus follows the carrier: not_provisioned (validated; routing not on yet), pending, activated, rejected or error (retried; never blocks).

GET /api/v1/emergency-locations lists a workspace's stored locations (application keys only); DELETE /api/v1/emergency-locations/{id} removes an override.

When someone dials 911

Test with 933, never 911. Show your users where to change their location, and tell them on every surface that a phone's own dialer is the safest way to reach 911.