Skip to the content
MenuCompliance

API reference

Compliance

Face and voice consent records, and the AI label in your own app.

GET/v1/compliance/ai-label

The AI label attestation

getAiLabelAttestationconsents:readread: 600/min per keySince 2026-10-01

Whether an owner has confirmed that your own app shows its own AI label for the whole of every session and a notice at its start, so the SDKs may hide theirs (the session token's disclosure.ownLabel), with the words they confirmed.

Returns

200 The current answer. data is AiLabelAttestation.

Fields of data
  • attestedbooleanrequired

    An owner has confirmed that your own app shows its own AI label: from the next session, the SDKs may hide theirs.

  • attestedAtstring (date-time) | nullrequired

    When the current answer was given.

  • attestedByobject | nullrequired

    The owner who gave it.

    • idstringrequired

      Person id (usr_…).

      pattern `^usr_.*`

  • versionstring | nullrequired

    The version of the words they confirmed.

  • currentVersionstringrequired

    The version of today's words.

  • wordsstringrequired

    What an owner confirms, word for word.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/compliance/ai-label" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"

Response

200 · JSON
{
  "data": {
    "attested": true,
    "attestedAt": "2026-09-25T12:00:00.000Z",
    "attestedBy": {
      "id": "usr_cmfq2b7x10000abcd1234"
    },
    "version": "…",
    "currentVersion": "…",
    "words": "…"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
PUT/v1/compliance/ai-label

Confirm or withdraw the AI label attestation

setAiLabelAttestationconsents:writewrite: 120/min per keySince 2026-10-01

The owner in attestedBy confirms today's words (attested: true with confirm: true) or withdraws the confirmation (attested: false). It applies from the next session: with it, aiLabel: { show: false } hides the SDK's label; without it, the SDKs draw their label again. Recorded in the organization's activity log in the owner's name.

Body

  • attestedbooleanrequired

    true confirms the words; false withdraws the confirmation (the SDKs draw their label again from the next session).

  • confirmboolean

    Required (true) to confirm: the owner has read today's words (words) and confirms them.

  • attestedBystringrequired

    The owner who confirms or withdraws it (usr_…).

Returns

200 The answer now. data is AiLabelAttestation.

Fields of data
  • attestedbooleanrequired

    An owner has confirmed that your own app shows its own AI label: from the next session, the SDKs may hide theirs.

  • attestedAtstring (date-time) | nullrequired

    When the current answer was given.

  • attestedByobject | nullrequired

    The owner who gave it.

    • idstringrequired

      Person id (usr_…).

      pattern `^usr_.*`

  • versionstring | nullrequired

    The version of the words they confirmed.

  • currentVersionstringrequired

    The version of today's words.

  • wordsstringrequired

    What an owner confirms, word for word.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl -X PUT "https://app.zentiqai.com/v1/compliance/ai-label" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "attested": true,
  "attestedBy": "usr_123"
}'

Response

200 · JSON
{
  "data": {
    "attested": true,
    "attestedAt": "2026-09-25T12:00:00.000Z",
    "attestedBy": {
      "id": "usr_cmfq2b7x10000abcd1234"
    },
    "version": "…",
    "currentVersion": "…",
    "words": "…"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
GET/v1/consents/{id}

Get a consent record

getConsentconsents:readread: 600/min per keySince 2026-10-01

One consent record, as its printable receipt shows it.

Path parameters

  • idstringrequired

    Consent record id (cns_…); the id without its prefix is accepted too.

Returns

200 The consent record. data is ConsentRecord.

Fields of data
  • idstringrequired

    Consent record id (cns_…).

    pattern `^cns_.*`

  • referencestringrequired

    The short reference printed on the receipt.

  • kindstringrequired

    voice_clone, likeness, character_rights or trademark.

  • kindLabelstringrequired
  • subjectKindstringrequired

    self (the person who confirmed it), other (someone else, named) or generated (no real person).

  • subjectstringrequired

    Whose face, voice, character or logo it is, in words.

  • attestedByobjectrequired

    Who confirmed the consent.

    • kind"member" | "api_key" | "unknown"required
    • idstring | nullrequired

      The member (usr_…) or the API key (key_…) that confirmed it.

    • namestringrequired
    • rolestringrequired

      Their role when they confirmed it.

  • textVersionstringrequired

    The version of the words confirmed.

  • textstringrequired

    The exact words confirmed, with the name filled in.

  • sourcestringrequired

    Where it was confirmed (api.avatars, dashboard.voice_clone, …).

  • sourceLabelstringrequired
  • assetType"voice" | "avatar" | "look"required

    What it made: a cloned voice, a face, or a branded look.

  • assetsobject[]required

    The voices, faces or looks made with it; active: false once retired.

    • idstringrequired

      vo_… for a voice, av_… for a face, the look's own id for a look.

    • namestring | nullrequired
    • activeboolean | nullrequired
  • personaIdstring | nullrequired
  • status"active" | "revoked"required
  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

  • revokedAtstring (date-time) | nullrequired
  • revokedBystring | nullrequired

    The name of the member who recorded the withdrawal.

  • revokeReasonstring | nullrequired

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/consents/cns_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"

Response

200 · JSON
{
  "data": {
    "id": "cns_cmfq2b7x10000abcd1234",
    "reference": "CR-4F2A9C1B",
    "kind": "likeness",
    "kindLabel": "…",
    "subjectKind": "self",
    "subject": "…"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
GET/v1/consents

List consent records

listConsentsconsents:readread: 600/min per keySince 2026-10-01

The consent register, newest first: every face, voice, character and logo consent recorded when a voice was cloned or an avatar made from a picture, with who confirmed it and in what role, the exact words and their version, the assets made with it and whether it was withdrawn. Paging through it is the console's export.

Query parameters

  • limitinteger

    Page size, 1-200 (default 50).

  • cursorstring

    The nextCursor of the previous page.

  • status"active" | "revoked"
  • assetType"voice" | "avatar" | "look"

Returns

200 A page of consent records. A page: data is a list of ConsentRecord, and nextCursor fetches the next page.

Fields of data
  • idstringrequired

    Consent record id (cns_…).

    pattern `^cns_.*`

  • referencestringrequired

    The short reference printed on the receipt.

  • kindstringrequired

    voice_clone, likeness, character_rights or trademark.

  • kindLabelstringrequired
  • subjectKindstringrequired

    self (the person who confirmed it), other (someone else, named) or generated (no real person).

  • subjectstringrequired

    Whose face, voice, character or logo it is, in words.

  • attestedByobjectrequired

    Who confirmed the consent.

    • kind"member" | "api_key" | "unknown"required
    • idstring | nullrequired

      The member (usr_…) or the API key (key_…) that confirmed it.

    • namestringrequired
    • rolestringrequired

      Their role when they confirmed it.

  • textVersionstringrequired

    The version of the words confirmed.

  • textstringrequired

    The exact words confirmed, with the name filled in.

  • sourcestringrequired

    Where it was confirmed (api.avatars, dashboard.voice_clone, …).

  • sourceLabelstringrequired
  • assetType"voice" | "avatar" | "look"required

    What it made: a cloned voice, a face, or a branded look.

  • assetsobject[]required

    The voices, faces or looks made with it; active: false once retired.

    • idstringrequired

      vo_… for a voice, av_… for a face, the look's own id for a look.

    • namestring | nullrequired
    • activeboolean | nullrequired
  • personaIdstring | nullrequired
  • status"active" | "revoked"required
  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

  • revokedAtstring (date-time) | nullrequired
  • revokedBystring | nullrequired

    The name of the member who recorded the withdrawal.

  • revokeReasonstring | nullrequired

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/consents?limit=20" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"

Response

200 · JSON
{
  "data": [
    {
      "id": "cns_cmfq2b7x10000abcd1234",
      "reference": "CR-4F2A9C1B",
      "kind": "likeness",
      "kindLabel": "…",
      "subjectKind": "self",
      "subject": "…"
    }
  ],
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d",
  "nextCursor": null
}
POST/v1/consents/{id}/revoke

Withdraw a consent

revokeConsentconsents:writewrite: 120/min per keyIdempotency-KeySince 2026-10-01

Records that the person withdrew their consent, in the name of the owner in revokedBy. The record is marked withdrawn (who, when, why) and its face, voice or look is retired: it leaves the pickers, and no persona wearing it can start a new session (409 consent_withdrawn). Nothing is deleted; past sessions keep their history. Withdrawing twice changes nothing.

Path parameters

  • idstringrequired

    Consent record id (cns_…); the id without its prefix is accepted too.

Body

  • revokedBystringrequired

    The owner who records the withdrawal (usr_…): consent records are for the organization's owners.

  • reasonstring

    Why, for the register.

    at most 500 characters

Returns

200 The consent record, withdrawn. data is ConsentWithdrawal.

Fields of data
  • consentConsentRecordrequired

    A face, voice, character or logo consent, as the consent register in the console shows it.

  • alreadyWithdrawnbooleanrequired

    It was withdrawn before: nothing changed.

  • assetsRetiredintegerrequired

    Voices, faces or looks taken out of use by this withdrawal.

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundidempotency_conflictidempotency_in_progressrate_limitedserver_error

Request

curl -X POST "https://app.zentiqai.com/v1/consents/cns_123/revoke" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "revokedBy": "usr_123"
}'

Response

200 · JSON
{
  "data": {
    "consent": {
      "id": "cns_cmfq2b7x10000abcd1234",
      "reference": "CR-4F2A9C1B",
      "kind": "likeness",
      "kindLabel": "…",
      "subjectKind": "self",
      "subject": "…"
    },
    "alreadyWithdrawn": true,
    "assetsRetired": 1
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}