Posts
post_destroyed
Sent when a post is deleted.
Only posts from SMS, email and public post social feeds send this event.
relationships.object.data identifies the deleted post. The post no longer exists by the time you receive the event, so don't rely on included: it may be empty, or contain the post as it was just before it was deleted. When it is empty, a webhook filter has nothing to match against and the event is delivered anyway.
Request
We send the event to your webhook's url with POST (or the webhook's http_method) and a JSON:API document as the body (Content-Type: application/vnd.api+json). See Receiving Webhooks for retries and Webhook Event Signatures to verify the request.
Headers
| Header | Description |
|---|---|
X-TINT-Signature | timestamp,signature, where timestamp is the Unix time (in seconds) at which the delivery was signed and signature is the Base64-encoded HMAC-SHA256 of timestamp.body, keyed with the webhook's signing secret. Only sent when the webhook has a signing secret. Every attempt is signed again, so retries carry a new timestamp. See Webhook Event Signatures. |
API-Version | The API version the payload was serialized with, unless the webhook overrides this header. |
User-Agent | Always TINT Webhook/2.0, unless the webhook overrides this header. |
Payload
| Field | Type | Description |
|---|---|---|
data | object | |
data.id | string | The event ID. It stays the same on every retry of this event, so use it to detect duplicate deliveries. It is also the ID to use with Retrieve a webhook event. |
data.type | string | Always event. One of event. |
data.attributes | object | |
data.attributes.name | string | The event name. One of post_destroyed. |
data.attributes.created_at | string (date-time) | When the event happened (the event was recorded), not when this delivery was sent. Retries keep the original value. |
data.relationships | object | |
data.relationships.object | object | The deleted post. |
data.relationships.object.data | object | |
data.relationships.object.data.type | string | One of post. |
data.relationships.object.data.id | string | |
data.relationships.team | object | The team the webhook belongs to. |
data.relationships.team.data | object | |
data.relationships.team.data.type | string | One of team. |
data.relationships.team.data.id | string |
Included resources
Don't rely on it: the post no longer exists, so this may be empty.
post
A post, as returned to authenticated requests.
| Field | Type | Description |
|---|---|---|
id | string | The ID of the post. |
type | string | The resource type. Always post. One of post. |
attributes | object | The attributes of a post. Attributes marked as only returned to authenticated requests are omitted from public responses. |
attributes.type (optional) | string | The source (network or channel) of the post. |
attributes.external_id (optional) | string | The ID of the post at the source. Generated for custom and public posts. |
attributes.url (optional) | string or null (uri) | The URL of the post at the source, or null if there isn't one. |
attributes.title (optional) | string or null | The title of the post, or null if it doesn't have one. |
attributes.text (optional) | string or null | The text of the post, or null if it's empty. |
attributes.alternative_text (optional) | string or null | The alternative text describing the post's media, for accessibility. |
attributes.published_at (optional) | string or null (date-time) | When the post was published at the source. |
attributes.highlighted (optional) | boolean or null | Whether the post is highlighted. |
attributes.pinned (optional) | boolean or null | Whether the post is pinned to the top of the board. |
attributes.tags (optional) | array or null | The tags assigned to the post. |
attributes.carousel (optional) | boolean | Whether the post is one of several media items published together. |
attributes.media_type (optional) | string | The type of media attached to the post: carousel when it's one of several media items published together, video or image for a single attachment, and text_only when it has no media. One of text_only, image, video, carousel. |
attributes.image_url (optional) | string or null (uri) | The URL of the post's image, or null if it has none. |
attributes.video_url (optional) | string or null (uri) | The URL of the post's video, or null if it has none. |
attributes.attachment_id (optional) | string or null | An opaque identifier of the post's media attachment. |
attributes.author (optional) | object | The author of the post. The same author is also available through the author relationship. email, phone and remote_ip are only returned to authenticated requests. |
attributes.author.name (optional) | string or null | The author's display name. |
attributes.author.username (optional) | string or null | The author's username at the source. |
attributes.author.url (optional) | string or null (uri) | The URL of the author's profile. |
attributes.author.image_url (optional) | string or null (uri) | The URL of the author's avatar. |
attributes.author.external_id (optional) | string or null | The author's ID at the source. |
attributes.author.email (optional) | string or null (email) | The author's email address. |
attributes.author.phone (optional) | string or null | The author's phone number. |
attributes.author.remote_ip (optional) | string or null | The author's anonymized IP address, for posts submitted through a public post form. |
attributes.metadata (optional) | object | Machine learning metadata about the post (also available through the dedicated attributes). Keys without a value are omitted. |
attributes.metadata.language (optional) | string | The dominant language of the text. |
attributes.metadata.sentiment (optional) | string | The sentiment of the text. |
attributes.metadata.image_nsfw (optional) | number | The NSFW score of the image. |
attributes.metadata.image_phash (optional) | string | The perceptual hash of the image. |
attributes.metadata.image_sentiments (optional) | array of string | The emotions detected in the image. |
attributes.metadata.image_objects (optional) | array of string | The objects detected in the image. |
attributes.metadata.image_objects_rekognition (optional) | array of string | Deprecated. Same as image_objects. |
attributes.language (optional) | string or null | The dominant language of the text (ISO 639-1 code). null when not detected. |
attributes.rating (optional) | integer or null | The review rating from 0 to 100. |
attributes.verified (optional) | boolean or null | Whether the review is from a verified buyer. Only set on reviews; null for other posts. |
attributes.incentivized (optional) | boolean or null | Whether the reviewer received an incentive. Only set on reviews; null for other posts. |
attributes.status (optional) | string | The moderation status of the post. Only returned to authenticated requests. One of public, private, deleted, author_deleted, privacy_deleted, moderation_deleted, image_moderation_pending, image_moderation_deleted, image_moderation_failed, custom_post. |
attributes.status_reasons (optional) | array or null | The reasons for the post's moderation status. Only returned to authenticated requests. |
attributes.last_moderated_at (optional) | string or null (date-time) | When the post was last moderated. Only returned to authenticated requests. |
attributes.custom_field (optional) | string or null | The value of the custom field of a public post form, or null. Only returned to authenticated requests. |
attributes.sentiment (optional) | string or null | The sentiment of the text. Only returned to authenticated requests. One of positive, negative, neutral, null. |
attributes.image_nsfw (optional) | number or null | The NSFW score of the image, from 0 to 1. null when not analyzed. Only returned to authenticated requests. |
attributes.image_phash (optional) | string or null | The perceptual hash of the image, used to find duplicates. null when not computed. Only returned to authenticated requests. |
attributes.image_sentiments (optional) | array or null | The emotions detected in the image. null when not analyzed. Only returned to authenticated requests. |
attributes.image_objects (optional) | array or null | The objects detected in the image. null when not analyzed. Only returned to authenticated requests. |
attributes.hue_probability (optional) | null | Deprecated. Always null. Only returned to authenticated requests. |
relationships (optional) | object | The post's relationships. Unless a relationship is requested with the include query parameter, only meta.included: false is returned (social_feed and tint always return data). |
relationships.social_feed (optional) | object | The social feed the post was ingested from. Returned to unauthenticated requests or when the access token has the social_feeds:read scope. |
relationships.social_feed.data (optional) | object | |
relationships.tint (optional) | object | The board the post belongs to. Only returned when the access token has the tints:read scope. |
relationships.tint.data (optional) | object | A resource identifier for a board. |
relationships.tint.links (optional) | object | |
relationships.author (optional) | object | The author of the post. The author's ID is the post's ID. |
relationships.author.data (optional) | object | Only returned when included. |
relationships.author.meta (optional) | object | |
relationships.replies (optional) | object | The replies to the post. Inactive replies are only included when the access token has the replies:read scope. |
relationships.replies.data (optional) | array of object | Only returned when included. |
relationships.replies.meta (optional) | object | |
relationships.products (optional) | object | The product tags of the post (resource type product_tag). Returned to unauthenticated requests or when the access token has the products:read scope. |
relationships.products.data (optional) | array of object | Only returned when included. |
relationships.products.meta (optional) | object | |
relationships.product_tags (optional) | object | The product tags on the post (see also products). Only returned to unauthenticated requests or when the access token has the products:read scope. |
relationships.product_tags.data (optional) | array of object | Only returned when included. |
relationships.product_tags.meta (optional) | object | |
relationships.cta_associations (optional) | object | The calls to action associated with the post, directly or through a saved filter. Returned to unauthenticated requests or when the access token has the ctas:read scope. |
relationships.cta_associations.data (optional) | array of object | Only returned when included. |
relationships.cta_associations.meta (optional) | object | |
relationships.asset (optional) | object | The asset created from the post. Only returned when the access token has the assets:read scope. |
relationships.asset.data (optional) | object or null | Only returned when included. null if no asset was created from the post. |
relationships.asset.meta (optional) | object | |
relationships.right_requests (optional) | object | The right requests sent for the post. Only returned when the access token has the right_requests:read scope. |
relationships.right_requests.data (optional) | array of object | Only returned when included. |
relationships.right_requests.meta (optional) | object | |
relationships.siblings (optional) | object | The other posts with the same source and external ID in other boards. Only returned when the collapse query parameter is source,external_id. |
relationships.siblings.data (optional) | array of object |
Example
{
"data": {
"id": "1377460",
"type": "event",
"attributes": {
"created_at": "2025-03-14T16:42:07.000Z",
"name": "post_destroyed"
},
"relationships": {
"object": {
"data": {
"type": "post",
"id": "987654321"
}
},
"team": {
"data": {
"type": "team",
"id": "1"
}
}
}
},
"included": []
}Responses
| Status | Description |
|---|---|
404 | 404 Not Found or 410 Gone stops delivery of this event immediately: it is marked failure and not retried. The attempt still counts toward the webhook's failure limit. |
410 | 404 Not Found or 410 Gone stops delivery of this event immediately: it is marked failure and not retried. The attempt still counts toward the webhook's failure limit. |
2XX | Any status below 400 (typically 2XX) acknowledges the event: we mark it success and don't send it again. The response body is ignored (we store it with the attempt, for your reference). Redirects are not followed, and a 3XX response also counts as acknowledged, so point the webhook at the final URL. |
| Other | Any other 4XX or 5XX status, a timeout or a connection error fails the attempt, and we retry up to 7 more times with an increasing delay (roughly 1 minute, 1 minute, 2 minutes, 13 minutes, 1 hour, 4 hours, then 13 hours later), after which the event is marked failure. More than 50 failed attempts for the same webhook within a week, without a successful delivery in between, set the webhook to inactive. |