Consent, by API.
One clean REST API, native SDKs for every surface, and signed webhooks for everything that happens after. Wire consent into your product once — and let the ledger do the proving.
From zero to a sealed receipt.
Three steps. No data leaves your control unencrypted, and every grant comes back provable.
Create an API key
Provision a scoped key for your tenant from the console. Keys are environment-bound and rotate without downtime, so staging never touches production records.
Capture consent
Open a consent session, render the itemised notice, and collect an affirmative decision. The purposes come from the notice itself, not from your request — so what a person agreed to is always exactly what they were shown.
Receive a sealed receipt
Submitting the session seals a tamper-evident receipt into the hash-chained ledger. Keep the id: the receipt carries a signature and the hash of the exact notice shown, so the moment of consent can be reproduced later.
Open a session,
seal a receipt.
Open a session against a named notice, then submit the decision. The purposes come from the notice, so the record always matches what the person actually saw — and the receipt comes back signed.
- Purposes resolved from the notice, not the caller
- Sealed into a hash-chained ledger
- Signed receipt with the notice hash
POST /api/v1/public/consent/sessions
Authorization: Bearer tiq_live_••••
Content-Type: application/json
{
"df_client_id": "dfc_9f2a4c7e",
"subject_ref": "[email protected]",
"subject_ref_type": "email",
"session_ref": "checkout-8412",
"notice_internal_name": "checkout_and_fulfilment",
"ui_mode": "embedded_popup",
"locale_pref": "hi"
} 201 Created
{
"consent_session_id": "0f9c1a3e-…",
"data_principal_id": "b73d18a0-…",
"consent_url": "https://consent.yourdomain.in/collect/…",
"notice_version_id": "4c81e2b7-…",
"notice_hash": "sha256:a3f2…c9e4",
"languageCode": "hi",
"expiresAt": "2026-07-28T09:41:22Z"
} Every surface, the same truth.
One notice, one purpose model, one ledger — whether consent is captured in a browser, a native app or your backend.
Web SDK
A drop-in notice renderer and cookie banner for any site or single-page app. Localises into 22 scheduled languages plus English and posts consent without a backend round-trip.
- Hosted CMP or self-render
- Preference centre
- One-click withdrawal
Mobile
Native iOS and Android libraries that present the same itemised notice inside your app and queue events offline, syncing the sealed receipt the moment a device reconnects.
- Swift + Kotlin
- Offline-first capture
- Shared notice versions
Server-side REST API
Call the API straight from your backend to open consent sessions, resolve a principal's current state and act on rights requests — no SDK required, and signed webhooks to verify what comes back.
- Any language, plain HTTP
- State resolution
- Signed-webhook verification
Know the moment it happens.
Signed, ordered events let your systems react the instant consent changes or an obligation is triggered — no polling, no drift.
consent.granted An affirmative decision was captured and a receipt was sealed into the ledger.
consent.withdrawn A principal withdrew consent — propagate the revocation across your connected systems.
consent.expired A consent reached the end of its validity — stop processing until it is renewed.
processing.halt_requested A downstream system is being instructed to stop processing this principal's data.
Wire consent in once,
prove it forever.
A 30-minute walkthrough mapped to your data, your notices, and your DPDP readiness deadline.