Download OpenAPI specification:
API documentation for SimRelay.
SimRelay supports multiple authentication methods:
The SimRelay Chrome Extension uses OAuth2 Authorization Code flow with PKCE for secure authentication. Simply install the extension and sign in with your SimRelay account.
Token Expiration:
For server-to-server integrations, use API keys. Create them at Settings > API Keys.
Authorization: Bearer sk_live_xxxxxxxxxxxxx
For mobile apps or simple integrations, use the /api/auth/login endpoint to obtain a token.
Checks database, cache, and queue system. Returns detailed status for each service.
{- "status": "ok",
- "timestamp": "2019-08-24T14:15:22Z",
- "checks": {
- "database": {
- "status": "ok",
- "message": "Database connection successful",
- "error": "string"
}, - "cache": {
- "status": "ok",
- "message": "Database connection successful",
- "error": "string"
}, - "queue": {
- "status": "ok",
- "message": "Database connection successful",
- "error": "string"
}
}
}| hosted_sim required | integer |
| per_page | integer [ 1 .. 100 ] Number of messages per page (default 50) |
| limit | integer [ 1 .. 100 ] Alternative to per_page for compatibility (default 50) |
| page | integer >= 1 Page number for pagination (default 1) |
| hosted_sim required | integer |
| to required | string Recipient phone number |
| text required | string Message content |
{- "to": "+1234567890",
- "text": "Hello, this is a test message"
}Returns user information and authentication context (Sanctum token or API key)
{- "user": {
- "id": 0,
- "name": "string",
- "email": "string",
- "email_verified_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "auth_type": "api_key",
- "organization": {
- "id": 1,
- "name": "Example Corp",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "api_key": {
- "id": 0,
- "name": "string",
- "permissions": [
- "string"
]
}
}| email required | string <email> |
| password required | string <password> |
{- "password": "pa$$word"
}{- "2fa_required": true,
- "tmp_token": "string"
}| tmp_token required | string |
| code required | string TOTP code from authenticator app |
{- "tmp_token": "string",
- "code": "string"
}{- "token": "string",
- "user": {
- "id": 0,
- "name": "string",
- "email": "string",
- "email_verified_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Retrieve all SIMs that the authenticated user has access to through their team and organization memberships, or for API keys, all SIMs in the organization.
{- "data": [
- {
- "id": 1,
- "number": "+1234567890",
- "provider": "seven",
- "status": "active",
- "type": "shared",
- "shared_max_orgs": 5,
- "messages_received_count": 123,
- "organizations": [
- {
- "id": 1,
- "name": "Example Corp",
- "alias": "Sales Team SIM",
- "team_id": 1
}
], - "teams": [
- {
- "id": 1,
- "name": "Sales Team"
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Returns all API keys belonging to the authenticated user's organization. Only accessible via Sanctum authentication, not API keys.
{- "data": [
- {
- "id": 1,
- "name": "Production API Key",
- "key_prefix": "sk_live_1234",
- "permissions": [
- "numbers.read",
- "messages.read"
], - "last_used_at": "2024-01-15T10:30:00Z",
- "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}
]
}Creates a new API key for the authenticated user's organization. Only accessible via Sanctum authentication.
| name required | string Display name for the API key |
| permissions required | Array of strings Items Enum: "numbers.read" "numbers.lock" "messages.read" "webhooks.receive" Array of permission strings |
{- "name": "Production API Key",
- "permissions": [
- "numbers.read",
- "messages.read"
]
}{- "api_key": {
- "id": 1,
- "name": "Production API Key",
- "key_prefix": "sk_live_1234",
- "permissions": [
- "numbers.read",
- "messages.read"
], - "last_used_at": "2024-01-15T10:30:00Z",
- "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}, - "plain_text_key": "sk_live_1234567890abcdef"
}Returns details of a specific API key. Only accessible via Sanctum authentication.
| api_key required | integer API key ID |
{- "id": 1,
- "name": "Production API Key",
- "key_prefix": "sk_live_1234",
- "permissions": [
- "numbers.read",
- "messages.read"
], - "last_used_at": "2024-01-15T10:30:00Z",
- "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}Updates an existing API key's name or permissions. Only accessible via Sanctum authentication.
| api_key required | integer API key ID |
| name | string Display name for the API key |
| permissions | Array of strings Items Enum: "numbers.read" "numbers.lock" "messages.read" "webhooks.receive" Array of permission strings |
{- "name": "string",
- "permissions": [
- "numbers.read"
]
}{- "id": 1,
- "name": "Production API Key",
- "key_prefix": "sk_live_1234",
- "permissions": [
- "numbers.read",
- "messages.read"
], - "last_used_at": "2024-01-15T10:30:00Z",
- "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}Regenerates the secret key for an existing API key. The old key will immediately stop working. Only accessible via Sanctum authentication.
| api_key required | integer API key ID |
{- "api_key": {
- "id": 1,
- "name": "Production API Key",
- "key_prefix": "sk_live_1234",
- "permissions": [
- "numbers.read",
- "messages.read"
], - "last_used_at": "2024-01-15T10:30:00Z",
- "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}, - "plain_text_key": "sk_live_9876543210fedcba"
}Returns all webhook integrations for the authenticated user's organization.
{- "data": [
- {
- "id": 1,
- "name": "My Webhook",
- "has_secret": true,
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "timeout_seconds": 30,
- "retry_count": 3,
- "is_active": true,
- "mappings": [
- {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "organization": {
- "id": 0,
- "name": "string"
}
}Creates a new webhook integration. A secure secret is auto-generated and returned (only shown once).
| name required | string <= 255 characters Display name for the webhook |
| url required | string <uri> <= 2048 characters URL to send webhook payloads to |
object Custom headers to include in webhook requests | |
| timeout_seconds | integer [ 1 .. 120 ] Request timeout in seconds (default 30) |
| retry_count | integer [ 0 .. 10 ] Number of retry attempts on failure (default 3) |
{- "name": "My Webhook",
- "headers": {
- "X-Custom-Header": "value"
}, - "timeout_seconds": 30,
- "retry_count": 3
}{- "message": "Webhook integration created successfully.",
- "data": {
- "id": 1,
- "name": "My Webhook",
- "has_secret": true,
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "timeout_seconds": 30,
- "retry_count": 3,
- "is_active": true,
- "mappings": [
- {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "secret": "abc123..."
}
}Returns details of a specific webhook integration including its mappings.
| webhook_integration required | integer Webhook integration ID |
{- "data": {
- "id": 1,
- "name": "My Webhook",
- "has_secret": true,
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "timeout_seconds": 30,
- "retry_count": 3,
- "is_active": true,
- "mappings": [
- {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Updates an existing webhook integration.
| webhook_integration required | integer Webhook integration ID |
| name required | string <= 255 characters |
| url required | string <uri> <= 2048 characters |
object | |
| timeout_seconds | integer [ 1 .. 120 ] |
| retry_count | integer [ 0 .. 10 ] |
| is_active | boolean Enable or disable the webhook |
{- "name": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "timeout_seconds": 1,
- "retry_count": 10,
- "is_active": true
}{- "message": "Webhook integration updated successfully.",
- "data": {
- "id": 1,
- "name": "My Webhook",
- "has_secret": true,
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "timeout_seconds": 30,
- "retry_count": 3,
- "is_active": true,
- "mappings": [
- {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Deletes a webhook integration and all its mappings.
| webhook_integration required | integer Webhook integration ID |
{- "message": "Webhook integration deleted successfully."
}Regenerates the webhook secret. The old secret will immediately stop working.
| webhook_integration required | integer Webhook integration ID |
{- "message": "Webhook secret regenerated successfully.",
- "data": {
- "id": 0,
- "name": "string",
- "secret": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Sends a test payload to the webhook URL to verify connectivity.
| webhook_integration required | integer Webhook integration ID |
{- "success": true,
- "http_status": 200,
- "response_body": "string",
- "response_time_ms": 150
}Returns all mappings for a specific webhook integration.
| webhook_integration required | integer Webhook integration ID |
{- "data": [
- {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "webhook_integration": {
- "id": 0,
- "name": "string"
}
}Creates a new mapping to associate a team with a webhook integration.
| webhook_integration required | integer Webhook integration ID |
| team_id required | integer Team ID to associate with this webhook |
| forwarding_mode required | string Enum: "always" "lock_required" When to forward messages:
|
{- "team_id": 1,
- "forwarding_mode": "always"
}{- "message": "Webhook mapping created successfully.",
- "data": {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Returns details of a specific webhook mapping.
| webhook_integration required | integer Webhook integration ID |
| webhook_mapping required | integer Webhook mapping ID |
{- "data": {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Updates an existing webhook mapping.
| webhook_integration required | integer Webhook integration ID |
| webhook_mapping required | integer Webhook mapping ID |
| forwarding_mode required | string Enum: "always" "lock_required" |
| is_active | boolean Enable or disable the mapping |
{- "forwarding_mode": "always",
- "is_active": true
}{- "message": "Webhook mapping updated successfully.",
- "data": {
- "id": 1,
- "team_id": 1,
- "team_name": "Sales Team",
- "forwarding_mode": "always",
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Deletes a webhook mapping.
| webhook_integration required | integer Webhook integration ID |
| webhook_mapping required | integer Webhook mapping ID |
{- "message": "Webhook mapping deleted successfully."
}Returns the WebSocket server URL, port, authentication method, and other necessary details for clients to connect to the configured broadcaster (e.g., Reverb).
{- "broadcaster": "reverb",
- "key": "your_reverb_app_key",
- "ws_url": "ws://localhost:8080",
- "ws_host": "localhost",
- "ws_port": 8080,
- "ws_scheme": "http",
- "force_tls": false,
- "auth_method": "bearer_token",
- "auth_header": "Authorization: Bearer <token>",
}Returns a paginated list of BYOS devices for the authenticated user's organizations. Supports filtering by device status.
| status | string Enum: "active" "disabled" "revoked" "pending_verification" Filter devices by status |
| per_page | integer [ 1 .. 100 ] Default: 15 Number of devices per page |
{- "data": [
- {
- "id": 1,
- "android_id": "a1b2c3d4e5f67890",
- "phone_number": "+14155551234",
- "device_name": "Samsung Galaxy S24",
- "status": "active",
- "is_online": true,
- "created_at": "2019-08-24T14:15:22Z",
- "twilio_number": "+12025551234",
- "sim_cards": [
- {
- "id": 1,
- "phone_number": "+14155551234",
- "sim_slot": 1,
- "status": "active",
- "signal_strength": 75,
- "is_active": true,
- "hosted_sim_id": 10,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "battery_level": 85,
- "last_seen_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "path": "string",
- "per_page": 0
}, - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}
}Registers a new device with SIM slot declarations. Each SIM slot receives a verification code that must be sent via SMS to the Twilio verification number to prove SIM ownership.
Flow:
sim_slots array (e.g. [1] or [1, 2] for dual-SIM)pending_verification status with pending SIM cardsverification_code per SIM and the twilio_number to SMS it totwilio_numberactive on first SIM verification| android_id required | string^[0-9a-fA-F]{16}$ 64-bit hex string from Android's Settings.Secure.ANDROID_ID. Unique per app signing key + device user combination. |
| sim_slots required | Array of integers [ 1 .. 2 ] items [ items [ 1 .. 10 ] ] SIM slot numbers to register. Each slot will receive a verification code. |
| device_model required | string <= 100 characters Android device model |
| app_version required | string <= 50 characters SimRelay app version |
| device_name | string <= 255 characters User-friendly device name (optional) |
{- "android_id": "a1b2c3d4e5f67890",
- "sim_slots": [
- 1
], - "device_model": "SM-S921B",
- "app_version": "1.2.3",
- "device_name": "Work Phone"
}{- "id": 1,
- "android_id": "a1b2c3d4e5f67890",
- "device_name": "Work Phone",
- "device_model": "SM-S921B",
- "app_version": "1.2.3",
- "status": "pending_verification",
- "twilio_number": "+12025551234",
- "sim_cards": [
- {
- "id": 1,
- "sim_slot": 1,
- "phone_number": null,
- "status": "pending",
- "verification_code": "SR-A2B3",
- "twilio_number": "+12025551234"
}
], - "created_at": "2019-08-24T14:15:22Z"
}Returns full details for a specific BYOS device including organization info and message count.
| device required | integer BYOS device ID |
{- "id": 1,
- "android_id": "a1b2c3d4e5f67890",
- "phone_number": "+14155551234",
- "device_name": "Samsung Galaxy S24",
- "status": "active",
- "is_online": true,
- "created_at": "2019-08-24T14:15:22Z",
- "twilio_number": "+12025551234",
- "sim_cards": [
- {
- "id": 1,
- "phone_number": "+14155551234",
- "sim_slot": 1,
- "status": "active",
- "signal_strength": 75,
- "is_active": true,
- "hosted_sim_id": 10,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "device_model": "SM-S921B",
- "app_version": "1.2.3",
- "config_version": 1,
- "battery_level": 85,
- "last_seen_at": "2019-08-24T14:15:22Z",
- "messages_received_count": 42,
- "organization": {
- "id": 1,
- "name": "Example Corp"
}, - "updated_at": "2019-08-24T14:15:22Z"
}Updates device name, phone number, or app version. Phone number changes are synced to the HostedSim record.
| device required | integer BYOS device ID |
| device_name | string <= 255 characters |
| phone_number | string Phone number in E.164 format |
| app_version | string <= 50 characters |
{- "device_name": "Updated Device Name",
- "phone_number": "+14155559999",
- "app_version": "1.3.0"
}{- "id": 1,
- "android_id": "a1b2c3d4e5f67890",
- "phone_number": "+14155551234",
- "device_name": "Samsung Galaxy S24",
- "status": "active",
- "is_online": true,
- "created_at": "2019-08-24T14:15:22Z",
- "twilio_number": "+12025551234",
- "sim_cards": [
- {
- "id": 1,
- "phone_number": "+14155551234",
- "sim_slot": 1,
- "status": "active",
- "signal_strength": 75,
- "is_active": true,
- "hosted_sim_id": 10,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "device_model": "SM-S921B",
- "app_version": "1.2.3",
- "config_version": 1,
- "battery_level": 85,
- "last_seen_at": "2019-08-24T14:15:22Z",
- "messages_received_count": 42,
- "organization": {
- "id": 1,
- "name": "Example Corp"
}, - "updated_at": "2019-08-24T14:15:22Z"
}Temporarily disables a device. Device status becomes 'disabled' and will not receive messages.
| device required | integer BYOS device ID |
{- "id": 1,
- "android_id": "a1b2c3d4e5f67890",
- "phone_number": "+14155551234",
- "device_name": "Samsung Galaxy S24",
- "status": "active",
- "is_online": true,
- "created_at": "2019-08-24T14:15:22Z",
- "twilio_number": "+12025551234",
- "sim_cards": [
- {
- "id": 1,
- "phone_number": "+14155551234",
- "sim_slot": 1,
- "status": "active",
- "signal_strength": 75,
- "is_active": true,
- "hosted_sim_id": 10,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "device_model": "SM-S921B",
- "app_version": "1.2.3",
- "config_version": 1,
- "battery_level": 85,
- "last_seen_at": "2019-08-24T14:15:22Z",
- "messages_received_count": 42,
- "organization": {
- "id": 1,
- "name": "Example Corp"
}, - "updated_at": "2019-08-24T14:15:22Z"
}Re-enables a disabled device. Device status becomes 'active' and will resume receiving messages.
| device required | integer BYOS device ID |
{- "id": 1,
- "android_id": "a1b2c3d4e5f67890",
- "phone_number": "+14155551234",
- "device_name": "Samsung Galaxy S24",
- "status": "active",
- "is_online": true,
- "created_at": "2019-08-24T14:15:22Z",
- "twilio_number": "+12025551234",
- "sim_cards": [
- {
- "id": 1,
- "phone_number": "+14155551234",
- "sim_slot": 1,
- "status": "active",
- "signal_strength": 75,
- "is_active": true,
- "hosted_sim_id": 10,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "device_model": "SM-S921B",
- "app_version": "1.2.3",
- "config_version": 1,
- "battery_level": 85,
- "last_seen_at": "2019-08-24T14:15:22Z",
- "messages_received_count": 42,
- "organization": {
- "id": 1,
- "name": "Example Corp"
}, - "updated_at": "2019-08-24T14:15:22Z"
}Returns server configuration for the device including intervals, limits, features, and current plan details.
| device required | integer BYOS device ID |
{- "device": {
- "id": 1,
- "phone_number": "+14155551234",
- "status": "active"
}, - "intervals": {
- "heartbeat_seconds": 300,
- "config_refresh_seconds": 3600,
- "retry_backoff_seconds": [
- 10,
- 30,
- 60,
- 300
]
}, - "limits": {
- "max_devices": 1,
- "current_devices": 1,
- "monthly_messages": 100,
- "current_month_messages": 42,
- "remaining_messages": 58
}, - "features": {
- "compression": false,
- "priority_support": false,
- "debug_mode": false
}, - "metadata": {
- "config_version": 1,
- "server_time": "2019-08-24T14:15:22Z",
- "plan_name": "Pro"
}
}Updates device health metrics and last_seen timestamp. Marks device as online and broadcasts status change event if device was offline.
The server uses adaptive timeouts based on Doze Mode state:
Email alerts are deferred until two consecutive intervals are missed.
| device required | integer BYOS device ID |
| battery_level | integer [ 0 .. 100 ] Current battery percentage (optional) |
| signal_strength | integer [ 0 .. 100 ] Current signal strength percentage (optional, backward compat - updates first SIM card) |
| is_in_doze_mode | boolean Default: false Whether the Android device is currently in Doze Mode. Server uses a longer timeout (960s vs 360s) for doze devices. |
Array of objects Per-SIM signal strength updates (optional) |
{- "battery_level": 85,
- "signal_strength": 75,
- "is_in_doze_mode": false,
- "sim_cards": [
- {
- "phone_number": "+4915123456789",
- "signal_strength": 80
}
]
}{- "success": true,
- "next_heartbeat_in": 300,
- "server_time": "2019-08-24T14:15:22Z"
}Submits an SMS message received by the BYOS device. Message is validated and queued for async processing.
| device required | integer BYOS device ID |
| from required | string <= 20 characters Sender phone number |
| body required | string <= 1600 characters SMS message content |
| message_id required | string <uuid> Unique message identifier from device |
| received_at | string <date-time> Timestamp when device received message (optional) |
| sim_slot | integer [ 1 .. 2 ] SIM slot number for dual-SIM devices (optional) |
{- "from": "+19876543210",
- "body": "Your verification code is 123456",
- "message_id": "550e8400-e29b-41d4-a716-446655440000",
- "received_at": "2019-08-24T14:15:22Z",
- "sim_slot": 1
}{- "message": "SMS received and queued for processing",
- "message_id": "550e8400-e29b-41d4-a716-446655440000"
}Adds a new SIM card slot to an existing device, pending SMS verification. Returns a verification code that must be sent via SMS to the Twilio number.
| device required | integer BYOS device ID |
| sim_slot required | integer [ 1 .. 10 ] Physical SIM slot number on the device |
{- "sim_slot": 2
}{- "id": 1,
- "sim_slot": 1,
- "phone_number": null,
- "status": "pending",
- "verification_code": "SR-A2B3",
- "twilio_number": "+12025551234"
}Updates SIM card metadata like phone number or slot number. Phone number changes sync to the associated HostedSim.
| device required | integer BYOS device ID |
| simCard required | integer SIM card ID |
| phone_number | string Phone number in E.164 format |
| sim_slot | integer or null [ 1 .. 10 ] |
{- "phone_number": "+14155559999",
- "sim_slot": 2
}{- "id": 1,
- "phone_number": "+14155551234",
- "sim_slot": 1,
- "status": "active",
- "signal_strength": 75,
- "is_active": true,
- "hosted_sim_id": 10,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Generates a new verification code for a pending or inactive SIM card. Use this when the original code has expired (codes expire after 5 minutes). Cannot be used on already-active SIM cards.
| device required | integer BYOS device ID |
| simCard required | integer SIM card ID |
{- "id": 1,
- "sim_slot": 1,
- "phone_number": null,
- "status": "pending",
- "verification_code": "SR-A2B3",
- "twilio_number": "+12025551234"
}Receives incoming SMS from Twilio when a BYOS device sends its verification code. This endpoint is called by Twilio, not by the app directly.
Flow:
SR-A2B3) to the Twilio numberFrom fieldSecurity: Requests are validated using Twilio request signature (X-Twilio-Signature header).
| From | string Sender phone number in E.164 format (the SIM's real number) |
| To | string Twilio phone number that received the SMS |
| Body | string SMS body containing the verification code |
| MessageSid | string Twilio message SID |
| AccountSid | string Twilio account SID |