Set consent preferences for a user at https://consent.transcend.io or https://consent.us.transcend.io. N.B. This is not a Sombra route. Authenticate with a signed JWT that carries identifier name/value pairs (preferred) or the deprecated single encryptedIdentifier. See reference for details.

POST

/sync
content-typestring
Specify content-type: application/json for a JSON response from the Transcend API.

application/json

partitionstring(required)
The consent partition or bundle ID. You can find the partition value under Consent Management > Developer Settings. If this value is not set, please use your bundle ID.
tokenstring(required)
A JWT signed with HS384. Prefer `{ "identifiers": [{ "name": "email", "value": "<AES-KWP encrypted value>" }] }`. Encrypt each value with your Preference Store encryption key (AES-KWP, base64). At least one identifier must be unique for the partition. Lowercase emails (and otherwise normalize identifiers) on your backend before encryption — Transcend never sees decrypted values and does not validate them. Deprecated: `{ "encryptedIdentifier": "<AES-KWP encrypted value>" }`. See [Storing Consent Preferences](https://docs.transcend.io/docs/preference-store/storing-consent-preferences).
consentobject(required)

Request Body Examples

Set consent for a user (preferred identifiers JWT):

{
  "token": "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVycyI6W3sibmFtZSI6ImVtYWlsIiwidmFsdWUiOiJGSDZOK2RlZ1ZjYjM2WDMxYXYvWnh3PT0ifV0sImlhdCI6MTY4MzY0NDk0Mn0.IRNqiXOz8oYJuWqdWfstgIjmQ9B_uJ-gvkw1mT5uUT-G9xdlPJ7zeODCCvlNIbf_",
  "partition": "7b9916f1-a9f7-45bd-b6d4-4bd7decfddaa",
  "consent": {
    "purposes": {
      "TestPurpose": false
    },
    "confirmed": true,
    "timestamp": "2023-05-11T19:32:31.707Z"
  }
}

Set consent for a user (deprecated encryptedIdentifier JWT):

{
  "token": "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJlbmNyeXB0ZWRJZGVudGlmaWVyIjoiRkg2TitkZWdWY2IzNlgzMWF2L1p4dz09IiwiaWF0IjoxNjgzNjQ0OTQyfQ.IRNqiXOz8oYJuWqdWfstgIjmQ9B_uJ-gvkw1mT5uUT-G9xdlPJ7zeODCCvlNIbf_",
  "partition": "7b9916f1-a9f7-45bd-b6d4-4bd7decfddaa",
  "consent": {
    "purposes": {
      "TestPurpose": false
    },
    "confirmed": true,
    "timestamp": "2023-05-11T19:32:31.707Z"
  }
}

200 (OK)

application/json

Upserts consent preferences and returns merged results

Response Body

purposesobject(required)
Consent purposes to update
confirmedboolean(required)
Was tracking consent confirmed by the user? If this is false, the consent was resolved from defaults & is not yet confirmed
timestampstring(required)
Timestamp of when consent was collected
updatedboolean
Has the consent been updated (including no-change confirmation) since default resolution
promptedboolean
Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js)
uspstring
US Privacy (USP) String
tcfstring
IAB Transparency & Consent Framework (TCF) 2.0 consent metadata

Response Body Example

Consent for user:

{
  "purposes": {
    "TestPurpose": false
  },
  "confirmed": true,
  "timestamp": "2023-05-11T19:32:31.707Z"
}

400 (Bad Request)

application/json

The token could not be verified or decoded

500 (Internal Server Error)

application/json

A 500 error means the backend is having issues. You check our system status at status.transcend.io. Please reach out to Transcend support if you're experiencing this error.