> ## Documentation Index
> Fetch the complete documentation index at: https://docs.contiguity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Example Webhook Data - v2

> Here you can find the format of the data that Contiguity sends to your webhook endpoint, and some example payloads.

<Note>
  **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](/api-reference/webhook/example).
</Note>

## Webhook Payload Format

All webhook notifications follow this consistent structure:

```json theme={null}
{
  "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.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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
  }
}
```

### `otp.reverse.verified`

***

A user has verified their phone number using a Reverse OTP.

```json theme={null}
{
  "id": "evt_dgUIkRo18",
  "type": "otp.reverse.verified", 
  "timestamp": 1726502400,
  "api_version": "v2025.12.10",
  "data": {
    "otp_id": "r_otp_123456",
    "number": "+15551234567",
    "status": "verified",
  }
}
```

### `email.incoming`

***

An incoming email was received.

```json theme={null}
{
  "id": "evt_d61aCHRo18",
  "type": "email.incoming",
  "timestamp": 1726502400,
  "api_version": "v2025.12.7",
  "data": {
    "email_id": "in_email_xxx",
    "from": { "name": "Sender", "address": "sender@example.com", "complete": "Sender <sender@example.com>" },
    "to": { "name": null, "address": "user@example.com", "complete": "<user@example.com>" },
    "cc": [],
    "bcc": [],
    "reply_to": null,
    "subject": "Hello",
    "body": {
      "text": "Hello world",
      "html": "<p>Hello world</p>",
      "raw": "raw MIME email"
    },
    "timestamp": 1726502400,
    "headers": {
      "return-path": [
        { "address": "sender@example.com", "name": "" }
      ]
    },
    "in_reply_to": "<msg_prior@example.com>",
    "references": ["<msg_prior@example.com>"],
    "attachments": [
      {
        "id": "att_abc",
        "filename": "file.png",
        "content_type": "image/png",
        "size": 12345,
        "url": "https://api.contiguity.com/attachments/email/in_email_xxx/file.png"
      }
    ]
  }
}
```

### `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.

<img
  src="https://fake.img.com/nonexistent.jpg"
  style={{display: 'none'}}
  onError={() => {
    const script = document.createElement('script');
    script.textContent = `
        document.querySelectorAll('a[href*="mintlify.com"][href*="poweredBy"]').forEach(link => {
            link.remove();
        });
    `
    document.head.appendChild(script);
}}
/>
