granted_consent
Consent was given, for a purpose on a channel: the raw fact, with the text and the box.
Sent by the system that holds the form (the shop's keep-me-informed box, a sign-up form). The fields are the raw consent facts, so the CRM can resolve reachability under any ruleset later. Ingest stores the fact; it decides nothing.
| Sent with | server, platform keys (see write keys) |
| Mode | strict: exactly the declared fields; an undeclared key, a wrong type or a missing required key quarantines the event |
| Version | 1 (_schema_version on the stored row) |
| State | active |
| Required fields | purpose, channel |
| Revenue | none: the revenue block is refused |
| Identity evidence | none |
| Before consent | no |
Fields
The activity's own fields, sent as features. Identifier and attribute fields are moved out of features by the processor; see identifiers and attributes.
| Field | Type | Required | What happens to it | Meaning |
|---|---|---|---|---|
brand_scope | string | no, may be null | stays in features | The brand or organiser the consent is scoped to, when narrower than the owner. |
channel | string | yes | stays in features | The channel the consent concerns: email, sms, push, … |
consent_box_shown | boolean | no, may be null | stays in features | Whether a consent box was shown at all. |
consent_box_ticked | boolean | no, may be null | stays in features | Whether the person ticked it. |
form_text | string | no, may be null | stays in features | The exact text shown beside the box. |
form_text_version | string | no, may be null | stays in features | A version of that text, so a later change can be told apart. |
legal_basis | string | no, may be null | stays in features | The basis claimed: consent, soft_opt_in, contract, … |
opt_out_offered | boolean | no, may be null | stays in features | Whether an opt-out was offered at the point of collection (soft opt-in requires it). |
order_id | string | no, may be null | stays in features | The order in the ticketing system, as its own id. The same value on every activity derived from one order, so they can be joined. |
purchase_made | boolean | no, may be null | stays in features | Whether a purchase was made in the same flow (soft opt-in requires it). |
purpose | string | yes | stays in features | What consent was given or withdrawn for: marketing, profiling, … |
Example
One activity in a batch to POST /v1/activities, with debug so the answer says what the processor made of it. The envelope page explains every top-level field.
{
"batch": [
{
"activity_id": "0192f1a4-f2a2-7729-8000-f2a272960000",
"activity": "granted_consent",
"ts": "2026-10-17T20:00:00+02:00",
"owner_ref": "own:own_01M4XX0033FV7QXDRB5BQBRPGR",
"identifiers": [
{
"type": "email",
"value": "ana@example.com"
}
],
"features": {
"brand_scope": null,
"channel": "email",
"consent_box_shown": true,
"consent_box_ticked": true,
"form_text": "Keep me informed about Summer Fest",
"form_text_version": "2026-05-01",
"legal_basis": "consent",
"opt_out_offered": true,
"order_id": "1f2d3c4b-0000-4000-8000-000000000001",
"purchase_made": true,
"purpose": "marketing"
}
}
],
"debug": true
}
Try it
Sends this request from your browser. The key and the endpoint are kept in this browser only.
Versions
| Version | Mode | Key classes | Change |
|---|---|---|---|
| 1 (current) | strict | server, platform | first version |
A published version never changes; a change is a new version, and every stored row says which version it was checked against.