List a marketing contact's consent events
One contact’s consent ledger, newest first: how the state on the contact came to be what it is. THIS IS THE EVIDENCE. The consent fields on a contact say what is true now; these rows say which channel, which decision, which words the person was shown and when. It is append-only and this platform holds no permission to update or delete a row, so a mistake can only be contradicted by a later event, never rewritten. ?channel= narrows it to email, sms or push. Omit it for the whole trail, which is the call to make when reconciling one person across channels. NO IP AND NO USER AGENT are published. They are a real person’s network address and device, and nothing that makes this row proof depends on them.
Authorizations
A secret API key. Publishable keys cannot reach this API. A key may carry an expiry, and an expired key is refused exactly like an unknown one, with a 401 that names no reason; check the key's expires_at in the dashboard rather than inferring it from a response. When a merchant rolls a key's secret they choose a grace window of up to 3 days, and for its duration BOTH the new secret and the one it replaced authenticate, so an integration moves over on its own deploy schedule instead of at the instant the button is pressed. Move before the window closes: after it, the old secret is refused. Nothing else about this contract moves with a roll. The key keeps its id and its scopes, so the only thing an integration updates is the credential itself.
Path Parameters
Query Parameters
Narrow the trail to one channel. OMIT IT for the whole history, which is the call to make when reconciling one person across channels: the dashboard's own read requires a channel because it drives a per-channel tab, and requiring one here would make the common case cost three requests. An unrecognised value is a 400.
email, sms, push Rows per page. Out of range is a 400 rather than a silent clamp, so a client asking for more than 100 learns it did not get it.
1 <= x <= 100The next_cursor from the previous page. Opaque: decode nothing from it and construct nothing by hand, since its encoding is not part of this contract. Omit it to read the first page.
