---
title: "Anunciar un consentimiento que se va a pedir"
method: POST
path: "/consent/intents"
tags: ["Intents de consentimiento"]
---

# Anunciar un consentimiento que se va a pedir

`POST /consent/intents`

## Request

- Base URL: `https://api.trytoku.com`
- URL: `https://api.trytoku.com/consent/intents`
- Auth: API key in header `x-api-key`

Registra qué se le va a pedir a quién, y devuelve el token con el que el widget lo registra. La organización llama esto **desde su servidor**, antes de renderizar el paso de su formulario.

**El titular queda anunciado acá y no viaja en el HTML.** El registro copia de este intent el identificador, el documento de identidad, el correo, el teléfono y el nombre, así que nada de lo que el browser mande puede cambiar quién aceptó.

El `client_token` **se responde una sola vez** —de acá en adelante sólo existe su hash—, vence a los 30 minutos y **registra un solo consentimiento**: reintentar con él devuelve el registro que ya existe en vez de escribir otro. Un formulario con varios agreements necesita un intent por cada uno.

**El titular tiene que poder encontrarse después**: además del identificador del comercio, trae un documento de identidad —RUT o pasaporte— o un correo. El correo se guarda sin espacios alrededor y en minúsculas.

Un titular sin ninguno de los dos, un RUT con dígito verificador inválido, un pasaporte que no cumple el formato o un correo sin forma de correo se rechaza acá, antes de que exista una página.

**Límite de tasa:** 20 solicitudes por segundo. Al superarlo, la API responde `429`. Ver [Límites de tasa](/reference/limites-de-tasa).

## Request body

- IntentCreateRequest
  - `agreement` string, required: uuid del agreement que el titular va a aceptar, el que la organización ve en el backoffice.
  - `subject` ConsentSubjectRequest, required
    - `email` string, nullable: Correo del titular. Se guarda sin espacios alrededor y en minúsculas, y tiene que tener forma de correo: una `@` y ningún espacio. **Hace falta este o el documento de identidad.**
    - `external_id` string, required: Identificador con el que el comercio ya reconoce al titular en sus propios sistemas.
    - `government_id` GovernmentIdRequest
      - `type` 'rut' | 'passport', required
      - `value` string, required: Valor del documento. Un RUT se normaliza —sin puntos, con guion, dígito verificador en mayúscula— y uno con dígito inválido se rechaza; un pasaporte se normaliza en mayúsculas y tiene que ser hasta nueve letras y dígitos, sin puntuación ni espacios.
    - `name` string, nullable: Nombre del titular, si el comercio lo capturó.
    - `phone` string, nullable: Teléfono del titular, si el comercio lo capturó.

## Response `201`

El consentimiento quedó anunciado. Devuelve el `client_token` que va al HTML, una sola vez, y hasta cuándo sirve.

- IntentCreatedResponse
  - `client_token` string, required: Lo único que va al HTML del comercio. Es opaco para la organización, se responde una sola vez —acá se guarda sólo su hash—, vence a los 30 minutos y registra un solo consentimiento.
  - `expires_at` string, date-time, required: Momento en que el token deja de servir, en UTC. Después de esto hay que emitir otro.
  - `uuid` string, required: uuid del intent creado, con el que la organización puede reconocerlo después.

## Other responses

- `400`: El titular declarado no se sostiene: no trae ni un documento de identidad ni un correo con el que encontrarlo después, el RUT tiene un dígito verificador que no corresponde, el pasaporte no cumple el formato —hasta nueve letras y dígitos—, el correo no tiene la forma de uno, o el identificador del comercio son sólo espacios. Un cuerpo que no cumple el contrato responde `422`.
- `401`: Faltan las credenciales o son inválidas.
- `403`: La request no declara una organización en `organization-consumer`.
- `404`: El agreement no existe o no es de la organización que llama.
- `422`: El cuerpo de la petición no pasó la validación.
- `429`: Se superó el límite de peticiones permitidas.

## Changes

- **2026-11-03** `a6ef070075b1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/trytoku/apis/toku-api/changes/consent/intents/post.md)

---

[API](https://skmtc.dev/trytoku/apis/toku-api.md) - [All operations](https://skmtc.dev/trytoku/apis/toku-api/llms.txt) - [OpenAPI document](https://skmtc.dev/trytoku/apis/toku-api/revisions/a6ef070075b1?raw)
