Home
Accounts

account_destroyed

Sent when one of the team's accounts is disconnected (deleted).

relationships.object.data identifies the deleted account. The account no longer exists by the time you receive the event, so don't rely on included: it may be empty, or contain the account 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

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 account_destroyed.
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 deleted account.
data.relationships.object.dataobject
data.relationships.object.data.typestringOne of account.
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

Don't rely on it: the account no longer exists, so this may be empty.

account

FieldTypeDescription
idstringThe unique identifier of the account.
typestringThe resource type. One of account.
attributesobject
attributes.type (optional)stringThe type of account, i.e. the external service it connects to.
attributes.external_id (optional)stringThe ID of this account at the source. For credential-based accounts this is derived from the credentials (for example the host of the site, or an MD5 digest of the API key).
attributes.status (optional)stringok when the stored credentials are valid, expired when they need to be reauthorized, and pending while the account is being set up. One of ok, expired, pending.
attributes.name (optional)string or nullThe display name of the account at the source.
attributes.username (optional)string or nullThe username or handle of the account at the source, when it has one.
attributes.image_url (optional)string or null (uri)The URL of the account's profile picture, when available.
attributes.site (optional)string or nullThe store URL, server URL or AWS region the account is tied to (e.g. for shopify, magento, woocommerce, ftp, http, sftp, and s3). null for other account types.
attributes.expires_at (optional)string or null (date-time)The time when the stored credentials are known to expire, or null if they don't expire.
attributes.capabilities (optional)array of stringWhat the account can be used for. Determined by the account type.
attributes.meta (optional)objectAdditional, source-specific information about the account (for example profile statistics). Empty for most account types.
attributes.followers_count (optional)integer or nullThe number of followers of the account at the source, when known.
attributes.follows_count (optional)integer or nullThe number of accounts this account follows at the source, when known.
attributes.media_count (optional)integer or nullThe number of media items published by the account at the source, when known.
attributes.likes_count (optional)integer or nullThe number of likes received by the account at the source, when known.
attributes.created_at (optional)string (date-time)The time when the account was connected.
attributes.updated_at (optional)string (date-time)The time when the account was last updated.
relationships (optional)object
relationships.social_feeds (optional)objectThe social feeds using this account. Only included when the access token has the social_feeds:read scope. data is only present when social_feeds is included (include=social_feeds) and only lists the social feeds of boards the user can access.
relationships.social_feeds.data (optional)array of object
relationships.social_feeds.meta (optional)object
relationships.subaccounts (optional)objectThe pages, organizations, channels, etc. that can be accessed with this account. data is only present when subaccounts is included (include=subaccounts); otherwise meta.included is false.
relationships.subaccounts.data (optional)array of object
relationships.subaccounts.meta (optional)object

Example

{
  "data": {
    "id": "1377453",
    "type": "event",
    "attributes": {
      "created_at": "2025-03-14T16:42:07.000Z",
      "name": "account_destroyed"
    },
    "relationships": {
      "object": {
        "data": {
          "type": "account",
          "id": "310"
        }
      },
      "team": {
        "data": {
          "type": "team",
          "id": "1"
        }
      }
    }
  },
  "included": []
}

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.