Query a user's Record of Consent
Query the Record of Consent (ROC) timeline for a single user. Every consent update that Transcend archives for that user is returned as one record, oldest first, so you can reconstruct what the user consented to at any point in time.
Each record reports the cumulative purpose and preference state at that timepoint, plus a diff against the previous record. Pass includeRawRequest to also receive the original archived payload for each record.
Rate Limits
- 100 requests per organization per minute (default).
- This limit can be increased upon request.
Rate Limiting Headers
X-RateLimit-Limit: The maximum number of requests allowed in the current window.X-RateLimit-Remaining: The number of requests remaining in the current window.X-RateLimit-Reset: The time at which the current rate limit window resets in ISO 8601 format.Retry-After: (on 429) The number of seconds to wait before making a new request.
Timeline ordering and diffs
- Records are returned most recent first, in chronological order.
preferencesAtCurrentTimeis the full cumulative state of every purpose the user has ever set at the time that record was received.changeFromPrevStatesplits the change introduced by the record intoadded,removedandupdatedpurposes. It is absent on the first record in the timeline, because there is no earlier record to compare against.- Diffs are computed at the purpose and preference level only. IAB strings (
tcf,gpp,usp) are not diffed — setincludeRawRequesttotrueand compare consecutive raw payloads if you need to audit those.
Limits
- This endpoint is not cursor-paginated. Omit
limitto receive the entire timeline in one response. limitmust be between 1 and 200. When provided, the most recentlimitrecords are returned.containsInitialRecordis always computed against the full timeline, even whenlimittruncates the returned records. It tells you whether the archive still holds the very first consent record for this user, which is what determines whether the timeline contains the true starting point or a partial view.
Identifiers
- Provide a single plaintext
identifier. The gateway validates, normalizes and encrypts it before the lookup, so plaintext identifiers never reach Transcend storage. identifier.namedefaults to the primary identifier configured for the partition, which isemailunless you have configured otherwise.- The lookup expands to every identifier linked to the same user, so querying by phone number returns the same timeline as querying by that user’s email.
- Identifiers inside
rawRequestare decrypted by your Sombra before being returned on this endpoint.
Raw archived records
rawRequestis present only whenincludeRawRequestistrue.- Unlike
preferencesAtCurrentTime, a raw record reflects exactly what was submitted:consentmay benullto indicate the purpose was cleared, andchoicemay benullto indicate a preference was cleared.
Empty results
- A user with no archived consent history returns
{ "records": [], "containsInitialRecord": false }rather than a 404.
Transcend_API_Key View Managed Consent Database Admin APIAuthorizationBearer <token>authorization: Bearer <>
Scope: View Managed Consent Database Admin API
partition*stringThe ID of the partition in the Preference Store.
content-type*stringSpecify content-type: application/json for a JSON response from the Transcend API.
application-jsonapplication/json- body
identifier*The user whose Record of Consent timeline should be returned.
limit?numberMaximum number of records to return, counting from the most recent. Omit to return the full timeline.
1 <= value <= 200includeRawRequest?booleanWhether to include the raw archived payload for each record in the rawRequest field.
falseReturns the user's Record of Consent timeline
application/json- response
records*array<>The Record of Consent timeline for the user, ordered oldest first. Empty when no consent history is archived for this user.
containsInitialRecord*booleanWhether the archive still holds the very first consent record for this user. When false, the timeline begins partway through the history and records[0] is not a true starting point. Always computed against the full timeline, even when limit truncates the response.
curl -X POST 'https://multi-tenant.sombra.transcend.io/v1/preferences/string/consent-records' \ -H 'authorization: string' \ -H 'content-type: string' \ -H 'Content-Type: application/json' \ -d '{ "identifier": { "name": "email", "value": "no-track@example.com" }}'{ "records": [ { "preferencesAtCurrentTime": [ { "purpose": "Marketing", "consent": true, "timestamp": "2024-10-07T20:44:35.000Z", "preferences": [] } ] }, { "preferencesAtCurrentTime": [ { "purpose": "Marketing", "consent": true, "timestamp": "2024-10-07T20:44:35.000Z", "preferences": [ { "topic": "Frequency", "choice": { "selectValue": "Weekly" } } ] }, { "purpose": "Analytics", "consent": true, "timestamp": "2024-10-08T20:44:35.000Z", "preferences": [] } ], "changeFromPrevState": { "added": [ { "purpose": "Analytics", "consent": true, "timestamp": "2024-10-08T20:44:35.000Z", "preferences": [] } ], "removed": [], "updated": [ { "purpose": "Marketing", "consent": true, "timestamp": "2024-10-07T20:44:35.000Z", "preferences": [ { "topic": "Frequency", "choice": { "selectValue": "Weekly" } } ] } ] } } ], "containsInitialRecord": true}