Skip to main content
Your webhook data doesn’t look like this?This page is for the v2 webhook format, which is used for users registered after November 1st, 2024. For the v1 format, see Example Webhook Data - v1.

Webhook Payload Format

All webhook notifications follow this consistent structure:
{
  "id": "evt_d61aCHRo18",
  "type": "text.incoming.sms", 
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    // event-specific data
  }
}

Events

Below are the events that Contiguity can send to your webhook endpoint. Use the type field to determine which event occurred.

text.incoming.sms


An incoming SMS message was received.
{
  "id": "evt_d61aCHRo18",
  "type": "text.incoming.sms",
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    "from": "+15551234567",
    "to": "+15559876543",
    "body": "Hello world",
    "timestamp": 1726502400
  }
}

text.incoming.mms


An incoming MMS message with attachments was received.
{
  "id": "evt_d61aCHRo18",
  "type": "text.incoming.mms",
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    "from": "+15551234567",
    "to": "+15559876543", 
    "body": "Check out this image!",
    "timestamp": 1726502400,
    "attachments": [
      {
        "url": "https://api.contiguity.com/attachments/15551234567/15559876543/image.jpg",
        "mime": "image/jpeg",
        "filename": "image.jpg"
      }
    ]
  }
}

text.delivery.confirmed


SMS/MMS delivery was confirmed by the carrier.
{
  "id": "evt_d61aCHRo18",
  "type": "text.delivery.confirmed",
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    "from": "+15551234567",
    "to": "+15559876543",
    "message_id": "msg_abc123",
    "timestamp": 1726502400
  }
}

text.delivery.failed


SMS/MMS delivery failed or timed out.
{
  "id": "evt_d61aCHRo18",
  "type": "text.delivery.failed",
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    "from": "+15551234567",
    "to": "+15559876543",
    "message_id": "msg_abc123",
    "timestamp": 1726502400,
    "error": "Carrier never provided delivery confirmation. Your message may have delivered, but Contiguity has no idea if it did."
  }
}

imessage.incoming


An incoming iMessage was received.
{
  "id": "evt_d61aCHRo18",
  "type": "imessage.incoming",
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    "from": "+15551234567",
    "to": "+15559876543",
    "body": "Hello from iMessage",
    "timestamp": 1726502400,
    "attachments": []
  }
}

numbers.substitution


When the requested number is unavailable, a random number is used instead.
{
  "id": "evt_d61aCHRo18",
  "type": "numbers.substitution", 
  "timestamp": 1726502400,
  "api_version": "v2025.9.7",
  "data": {
    "original_number": "+15551111111",
    "used_number": "+15552222222",
    "reason": "requested_unavailable_random_used",
    "message_id": "msg_abc123",
    "timestamp": 1726502400
  }
}

email.incoming


An incoming email was received.
{
    "id": "evt_1234567890",
    "type": "email.incoming",
    "timestamp": 1726502400,
    "api_version": "v2025.8.21",
    "data": {
        "message_id": "xxx-xx-contiguity-email-xxxxx",
        "to": "user@example.com",
        "from": "support@example.com",
        "subject": "Some subject",
        "body": {
            "type": "text",
            "content": "Hello, how are you?",
            "raw_body": "headers, body, etc."
        }
    }
}

identity.verification_session.started


A user began verifying their identity.

identity.verification_session.processing


A user has submitted their identity information, and Contiguity is verifying it.

identity.verification_session.verified


A user has submitted their identity information, and the verification is complete. Here, you will also receive a data.verification_report field, which contains the Verification Report ID for you to fetch.

identity.verification_session.failed


A user has submitted their identity information, but Contiguity believes their information is invalid (high-accuracy)

identity.verification_session.requires_input


A user has submitted their identity information, but Contiguity isn’t sure of their identity. You will have to review their information in the Console, and manually approve or deny them.

identity.verification_session.manually_approved


A user’s verification session was manually approved by you in the Console.

identity.verification_session.manually_denied


A user’s verification session was manually denied by you in the Console.

identity.verification_report.generated


In addition to identity.verification_session.completed, you will also receive this event. Here, there will be non-sensitive information about the verification report, such as age & country of residence.
I