# Webhooks for Threads



Webhooks for Threads allow you to receive real-time notifications for the subscribed topics and fields.

## Receive Live Webhook Notifications

To receive live webhook notifications, the following conditions must be satisfied:

- Your app must have Threads webhooks added as a sub-use case and appropriate fields subscribed to in the App Dashboard.

- For non-tech providers, the apps must be in [Live Mode](https://developers.facebook.com/documentation/development/build-and-test/app-modes).

- For tech providers, the apps must have permissions with an [Advanced Access level](https://developers.facebook.com/docs/graph-api/overview/access-levels). You can request Advanced Access for permissions as shown here:

If the app permissions don't have an access level of Advanced Access, the app won't receive webhook notifications.

- The app user must have granted your app appropriate permissions (i.e., `threads_basic`, `threads_read_replies` for reply webhooks).

- The business connected to the app must be verified.

- To receive real-time [reply](#real-time-reply-notifications) and [mention](#real-time-mention-notifications) notifications, the owner of the media object upon which the webhook event occurs must not have set their account to private.

- To receive real-time [delete](#real-time-delete-notifications) and [publish](#real-time-publish-notifications) notifications, the owner of the media object upon which the webhook event occurs must be a public account or private account that authenticated to the app.

### Limitations

* Apps don't receive webhook notifications if the media where the reply or mention appears was created by a private account.
* Your app must have successfully completed App Review ([Advanced Access](https://developers.facebook.com/docs/graph-api/overview/access-levels)) to receive webhooks notifications for all of the fields.

### Step 0: [Optional] Use the sample app to test your integration

Download the [webhooks sample app](https://github.com/fbsamples/graph-api-webhooks-samples/) to test your integration.

### Step 1: Add the webhooks sub-use case to the main Threads API use case

Under **Use Cases** > **Customize** > **Settings**, add the **Get real-time notifications with Threads Webhooks** sub-use case.

### Step 2: Create an endpoint and configure Threads webhooks

[Create an endpoint](https://developers.facebook.com/docs/graph-api/webhooks/getting-started) that accepts and processes webhooks. To add the configuration:

1. Select the desired topic, and click **Subscribe to this object**.
2. Set the callback URL and token.

The token here is passed to your server defined in the callback URL to allow verification that the call originates from Meta servers.

#### Webhook Topics

##### Moderate topic fields

| Name | Description |
| --- | --- |
| `replies` | [Replies](https://developers.facebook.com/documentation/threads/retrieve-and-manage-replies/replies-and-conversations#a-thread-s-replies) on a [Threads Media](https://developers.facebook.com/documentation/threads/retrieve-and-discover-posts/retrieve-posts) owned by the Threads install user.  <br>**Required permission(s):** [`threads_basic`](https://developers.facebook.com/docs/permissions#threads_basic), [`threads_read_replies`](https://developers.facebook.com/docs/permissions#threads_read_replies) |
| `delete` | Threads posts that were [deleted](https://developers.facebook.com/documentation/threads/posts/delete-posts) by the authenticated user.  <br>**Required permissions:** [`threads_basic`](https://developers.facebook.com/docs/permissions#threads_basic), [`threads_delete`](https://developers.facebook.com/docs/permissions#threads_delete) |

##### Interaction topic fields

| Name | Description |
| --- | --- |
| `mentions` | [Mentions](https://developers.facebook.com/documentation/threads/threads-mentions) on a public [Threads Media](https://developers.facebook.com/documentation/threads/retrieve-and-discover-posts/retrieve-posts) tagging the Threads install user.  <br>**Required permission(s):** [`threads_basic`](https://developers.facebook.com/docs/permissions#threads_basic), [`threads_manage_mentions`](https://developers.facebook.com/docs/permissions#threads_manage_mentions)  <br>**Optional permission(s):** [`threads_read_replies`](https://developers.facebook.com/docs/permissions#threads_read_replies) — required for the `has_replies`, `is_reply`, `replied_to`, and `root_post` fields. Without this permission, these fields will be removed from the webhook response. |
| `publish` | Threads posts that were [published](https://developers.facebook.com/documentation/threads/posts) by the authenticated user (including replies to user's or other's posts).  <br>**Required permissions:** `threads_basic` |

## Notification Formats

### Fields

| Name | Description |
| --- | --- |
| `app_id` | The Threads App ID displayed in **App Dashboard** > **App settings** > **Basic** > **Threads App ID**. |
| `topic` | Name of the Webhook topic.  <br>We support moderate and interaction topics. |
| `target_id` | The media’s ID for a `reply` or `delete` webhook, or the mentioned Threads user app-scoped user ID for a `mentions` webhook. |
| `time` | Time when the real-time notification is sent. |
| `subscription_id` | The subscription ID for the user in the webhook. |
| `id` | The media's ID. |
| `deleted_at` | Time when the post was deleted in ISO 8601 format. |
| `timestamp` | Time when the post was published in ISO 8601 format. |

### Real-time reply notifications

If you subscribe to the `replies` field, we send your endpoint a webhook notification containing the reply object.

#### Sample replies payload

```json
{
    "app_id": "123456",
    "topic": "moderate",
    "target_id": "78901",
    "time": 1723226877,
    "subscription_id": "234567",
    "has_uid_field": false,
    "values": {
        "value": {
            "id": "8901234",
            "username": "test_username",
            "text": "Reply",
            "media_type": "TEXT_POST",
            "permalink": "https:\/\/www.threads.net\/@test_username\/post\/Pp",
            "replied_to": {
                "id": "567890"
            },
           "root_post": {
               "id": "123456",
               "owner_id": "123456",
               "username": "test_username_2"
           },
            "shortcode": "Pp",
            "timestamp": "2024-08-07T10:33:16+0000"
        },
        "field": "replies"
    }
}
```

**Note:** Additional fields not listed in this sample response that are returned when applicable include `is_verified` and `profile_picture_url`.

### Real-time mention notifications

If you subscribe to the `mentions` field, we send your endpoint a webhook notification containing the media object in which the user is mentioned.

#### Sample mentions payload

```json
{
    "app_id": "123456",
    "topic": "interaction",
    "target_id": "78901",
    "time": 1723226877,
    "subscription_id": "234567",
    "has_uid_field": false,
    "values": {
        "value": {
            "id": "8901234",
            "alt_text": "test alt text",
            "gif_url": "https://media2.giphy.com/media/v1.Y2lkPTA1NzQyMTNjd2R0MXcybjZ6bDNyam9qaXJsN3RicnVncnFsanJ2dGk3eDJiejRmbyZlcD12MV9naWZzX2dpZklkJmN0PWc/3o85xEFRBYvAnamJnG/200.gif",
            "has_replies": true,
            "is_quote_post": false,
            "is_reply": false,
            "media_product_type": "THREADS",
            "media_type": "TEXT_POST",
            "permalink": "https:\/\/www.threads.net\/@test_username\/post\/Pp",
            "shortcode": "Pp",
            "text": "Reply",
            "timestamp": "2024-08-07T10:33:16+0000"
            "username": "test_username",
        },
        "field": "mentions"
    }
}
```

**Note:** Additional fields not listed in this sample response that are returned when applicable include `media_url`, `poll_attachment`, `quoted_post`, `replied_to`, `reposted_post`, `root_post`, `is_verified`, `profile_picture_url`, and `thumbnail_url`.

### Real-time delete notifications

If you subscribe to the `delete` field, we send your endpoint a webhook notification containing the media object when it's deleted.

#### Sample delete payload

```json
{
    "app_id": "123456",
    "topic": "moderate",
    "target_id": "78901",
    "time": 1723226877,
    "subscription_id": "234567",
    "has_uid_field": false,
    "values": {
        "value": {
            "id": "8901234",
            "owner": {
               "owner_id": "78901",
            },
            "deleted_at": "2024-08-07T10:33:16+0000"
            "timestamp": "2024-08-07T10:33:16+0000"
            "username": "test_username",
        },
        "field": "delete"
    }
}
```

### Real-time publish notifications

If you subscribe to the `publish` field, we send your endpoint a webhook notification containing the media object when it's published (including replies to user's or other's posts).

#### Sample publish payload

```json
{
    "app_id": "123456",
    "topic": "interaction",
    "target_id": "78901",
    "time": 1723226877,
    "subscription_id": "234567",
    "has_uid_field": false,
    "values": {
        "value": {
            "id": "8901234",
            "media_type": "TEXT_POST"
            "permalink": "https:\/\/www.threads.net\/@test_username\/post\/Pp",
            "timestamp": "2024-08-07T10:33:16+0000"
            "username": "test_username",
        },
        "field": "publish"
    }
}
```