Home
Posts

post_updated

Sent when a post changes (for example, when it is moderated).

Only posts from SMS, email and public post social feeds send this event.

relationships.object.data identifies the post, and included contains the post.

The payload below is the default JSON:API document. The webhook's payload_include, payload_fields and payload_transformation_template change it, and its filter decides whether the event is sent at all.

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

HeaderDescription
X-TINT-Signaturetimestamp,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-VersionThe API version the payload was serialized with, unless the webhook overrides this header.
User-AgentAlways TINT Webhook/2.0, unless the webhook overrides this header.

Payload

FieldTypeDescription
dataobject
data.idstringThe 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.typestringAlways event. One of event.
data.attributesobject
data.attributes.namestringThe event name. One of post_updated.
data.attributes.created_atstring (date-time)When the event happened (the event was recorded), not when this delivery was sent. Retries keep the original value.
data.relationshipsobject
data.relationships.objectobjectThe post this event is about.
data.relationships.object.dataobject
data.relationships.object.data.typestringOne of post.
data.relationships.object.data.idstring
data.relationships.teamobjectThe team the webhook belongs to.
data.relationships.team.dataobject
data.relationships.team.data.typestringOne of team.
data.relationships.team.data.idstring

Included resources

The sideloaded resources: the post.

post

A post, as returned to authenticated requests.

FieldTypeDescription
idstringThe ID of the post.
typestringThe resource type. Always post. One of post.
attributesobjectThe attributes of a post. Attributes marked as only returned to authenticated requests are omitted from public responses.
attributes.type (optional)stringThe source (network or channel) of the post.
attributes.external_id (optional)stringThe 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 nullThe title of the post, or null if it doesn't have one.
attributes.text (optional)string or nullThe text of the post, or null if it's empty.
attributes.alternative_text (optional)string or nullThe 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 nullWhether the post is highlighted.
attributes.pinned (optional)boolean or nullWhether the post is pinned to the top of the board.
attributes.tags (optional)array or nullThe tags assigned to the post.
attributes.carousel (optional)booleanWhether the post is one of several media items published together.
attributes.media_type (optional)stringThe 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 nullAn opaque identifier of the post's media attachment.
attributes.author (optional)objectThe 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 nullThe author's display name.
attributes.author.username (optional)string or nullThe 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 nullThe 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 nullThe author's phone number.
attributes.author.remote_ip (optional)string or nullThe author's anonymized IP address, for posts submitted through a public post form.
attributes.metadata (optional)objectMachine learning metadata about the post (also available through the dedicated attributes). Keys without a value are omitted.
attributes.metadata.language (optional)stringThe dominant language of the text.
attributes.metadata.sentiment (optional)stringThe sentiment of the text.
attributes.metadata.image_nsfw (optional)numberThe NSFW score of the image.
attributes.metadata.image_phash (optional)stringThe perceptual hash of the image.
attributes.metadata.image_sentiments (optional)array of stringThe emotions detected in the image.
attributes.metadata.image_objects (optional)array of stringThe objects detected in the image.
attributes.metadata.image_objects_rekognition (optional)array of stringDeprecated. Same as image_objects.
attributes.language (optional)string or nullThe dominant language of the text (ISO 639-1 code). null when not detected.
attributes.rating (optional)integer or nullThe review rating from 0 to 100.
attributes.verified (optional)boolean or nullWhether the review is from a verified buyer. Only set on reviews; null for other posts.
attributes.incentivized (optional)boolean or nullWhether the reviewer received an incentive. Only set on reviews; null for other posts.
attributes.status (optional)stringThe 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 nullThe 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 nullThe value of the custom field of a public post form, or null. Only returned to authenticated requests.
attributes.sentiment (optional)string or nullThe sentiment of the text. Only returned to authenticated requests. One of positive, negative, neutral, null.
attributes.image_nsfw (optional)number or nullThe NSFW score of the image, from 0 to 1. null when not analyzed. Only returned to authenticated requests.
attributes.image_phash (optional)string or nullThe perceptual hash of the image, used to find duplicates. null when not computed. Only returned to authenticated requests.
attributes.image_sentiments (optional)array or nullThe emotions detected in the image. null when not analyzed. Only returned to authenticated requests.
attributes.image_objects (optional)array or nullThe objects detected in the image. null when not analyzed. Only returned to authenticated requests.
attributes.hue_probability (optional)nullDeprecated. Always null. Only returned to authenticated requests.
relationships (optional)objectThe 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)objectThe 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)objectThe board the post belongs to. Only returned when the access token has the tints:read scope.
relationships.tint.data (optional)objectA resource identifier for a board.
relationships.tint.links (optional)object
relationships.author (optional)objectThe author of the post. The author's ID is the post's ID.
relationships.author.data (optional)objectOnly returned when included.
relationships.author.meta (optional)object
relationships.replies (optional)objectThe replies to the post. Inactive replies are only included when the access token has the replies:read scope.
relationships.replies.data (optional)array of objectOnly returned when included.
relationships.replies.meta (optional)object
relationships.products (optional)objectThe 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 objectOnly returned when included.
relationships.products.meta (optional)object
relationships.product_tags (optional)objectThe 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 objectOnly returned when included.
relationships.product_tags.meta (optional)object
relationships.cta_associations (optional)objectThe 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 objectOnly returned when included.
relationships.cta_associations.meta (optional)object
relationships.asset (optional)objectThe asset created from the post. Only returned when the access token has the assets:read scope.
relationships.asset.data (optional)object or nullOnly returned when included. null if no asset was created from the post.
relationships.asset.meta (optional)object
relationships.right_requests (optional)objectThe 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 objectOnly returned when included.
relationships.right_requests.meta (optional)object
relationships.siblings (optional)objectThe 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": "1377459",
    "type": "event",
    "attributes": {
      "created_at": "2025-03-14T16:42:07.000Z",
      "name": "post_updated"
    },
    "relationships": {
      "object": {
        "data": {
          "type": "post",
          "id": "987654321"
        }
      },
      "team": {
        "data": {
          "type": "team",
          "id": "1"
        }
      }
    }
  },
  "included": [
    {
      "id": "987654321",
      "type": "post",
      "attributes": {
        "highlighted": false,
        "pinned": false,
        "tags": [
          "contest"
        ],
        "alternative_text": null,
        "title": null,
        "carousel": false,
        "attachment_id": null,
        "external_id": "SM5f1c2e9a7b",
        "verified": false,
        "incentivized": false,
        "text": "Loving my new Acme hiking boots! #AcmeOutdoors",
        "url": null,
        "last_moderated_at": null,
        "status": "public",
        "status_reasons": [],
        "hue_probability": null,
        "custom_field": null,
        "sentiment": "positive",
        "image_nsfw": null,
        "image_phash": null,
        "image_sentiments": null,
        "image_objects": null,
        "type": "sms",
        "published_at": "2025-03-14T16:42:07.000Z",
        "rating": null,
        "media_type": "image",
        "author": {
          "name": "Jane Doe",
          "username": null,
          "url": null,
          "image_url": null,
          "email": null,
          "phone": "+15555550123",
          "remote_ip": null,
          "external_id": null
        },
        "metadata": {
          "language": "en",
          "sentiment": "positive"
        },
        "image_url": "https://cdn.example.com/posts/987654321/image.jpg",
        "video_url": null,
        "language": null
      },
      "relationships": {
        "social_feed": {
          "data": {
            "type": "social_feed",
            "id": "31337"
          }
        },
        "tint": {
          "data": {
            "type": "tint",
            "id": "4242"
          },
          "links": {
            "self": "https://api.tintup.com/v2/teams/1/tints/4242"
          }
        },
        "author": {
          "meta": {
            "included": false
          }
        },
        "product_tags": {
          "meta": {
            "included": false
          }
        },
        "replies": {
          "meta": {
            "included": false
          }
        },
        "products": {
          "meta": {
            "included": false
          }
        },
        "cta_associations": {
          "meta": {
            "included": false
          }
        },
        "asset": {
          "meta": {
            "included": false
          }
        },
        "right_requests": {
          "meta": {
            "included": false
          }
        }
      }
    }
  ]
}

Responses

StatusDescription
404404 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.
410404 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.
2XXAny 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.
OtherAny 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.