Compliance
Create Consent
Record a consent with its evidence. 422 if the lead has no address for the channel.
API key access
Needs the
compliance:write scope with an API key (ro_pat_...). A signed-in session uses the caller's role.POST
/api/v1/leads/{lead_id}/consentsAuthorizationBearer <token>
Access token from /api/v1/auth/login, or an API key (ro_pat_..., RO-176) from /api/v1/workspaces/current/api-keys: the key implies its workspace and needs the route's scope. MCP connectors (/api/v1/mcp only) may use an OAuth access token (ro_oat_..., RO-284).
In: header
Path Parameters
lead_idstring
Format
uuidHeader Parameters
X-Workspace-Id?string | null
Id of the workspace to act on (must be a member).
channelChannel
Value in
"email" | "phone" | "sms" | "linkedin"consent_typeConsentType
Strongest first. express_written is what TCPA requires for marketing calls to mobiles.
Value in
"express_written" | "express" | "implied" | "legitimate_interest" | "existing_relationship"purpose?ConsentPurpose
Default
"marketing"sourcestring
Length
1 <= length <= 64evidence?object
Proof of consent: form URL, IP, checkbox text, recording reference, ...
Empty Object
captured_at?string | null
When consent was given (timezone required); default now
Format
date-timecontact_value?string | null
Address the consent covers; default: the lead's current one for the channel
Length
length <= 500Response Body
curl -X POST "http://localhost:8000/api/v1/leads/497f6eca-6276-4993-bfeb-53cbbbba6f08/consents" \ -H "X-Workspace-Id: string" \ -H "Content-Type: application/json" \ -d '{ "channel": "email", "consent_type": "express_written", "source": "web_form" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
"lead_id": "9bddab70-98e6-43a9-8f32-c9788b9de0c0",
"channel": "email",
"consent_type": "express_written",
"purpose": "marketing",
"contact_value": "string",
"source": "string",
"evidence": {
"property1": null,
"property2": null
},
"captured_at": "2019-08-24T14:15:22Z",
"revoked_at": "2019-08-24T14:15:22Z",
"revoked_reason": "string",
"created_at": "2019-08-24T14:15:22Z"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}