Crear Consentimiento
Crear Consentimiento
POST /cl/consent_manager/create_consent
Registra un consentimiento STANDARD bajo cualquiera de los marcos legales soportados.
| Ambiente | URL |
|---|---|
| Producción | https://api.floid.app/cl/consent_manager/create_consent |
| Sandbox | https://sandbox.floid.app/cl/consent_manager/create_consent |
Headers requeridos
Authorization: Bearer {{TOKEN}}
Content-Type: application/json
El
client_idse deriva del Bearer token. Si lo envías en el body, el servidor lo ignora. No lo incluyas.
Cómo está organizada la solicitud
El cuerpo de la solicitud tiene una parte común a todos los marcos y bloques específicos que se activan según el marco y el tipo de titular:
- Campos comunes — presentes en todo consentimiento.
- Datos del titular — varían según
subject_type(NATURAL,JURIDICA). - Bloque
redec— obligatorio solo cuandolegal_frameworkesREDEC. - Objeto
evidence— obligatorio cuando la evidencia se entrega en la creación. - Objeto
metadata— opcional, para información adicional del cliente.
Campos comunes
| Campo | Tipo | Requerido | Descripción | Ejemplo |
|---|---|---|---|---|
legal_framework | enum | Sí | Marco legal del consentimiento: REDEC, LPDP o SFA. Determina qué bloque específico se exige. | "REDEC" |
internal_code | string | Sí | Código único del consentimiento dentro del tenant, definido por el cliente para correlacionarlo con su sistema. Máx. 20 caracteres: A-Z, 0-9, ., _, -, /. | "BCH-2026-001" |
subject_type | enum | Sí | Tipo de titular: NATURAL, JURIDICA . | "NATURAL" |
template_id | string | Sí | Identificador de una plantilla activa que originará el consentimiento. | "tpl_redec_onboarding" |
template_version_id | string | No | Versión activa específica de la plantilla. Si se omite, se usa la versión activa. | "tpl_v_2026_03" |
tc_id | string | Condicional | Identificador del T&C. Obligatorio solo si la plantilla no tiene uno asociado. | "tc_privacidad" |
tc_version_id | string | No | Versión específica del T&C. Si se omite, se utiliza su versión activa. | "tc_v_2026_01" |
is_mandatory | boolean | Sí | Indica si el consentimiento es necesario para habilitar o mantener una finalidad, funcionalidad, servicio, proceso o exigencia regulatoria. Puede estar relacionado con un contrato, pero no se limita a relaciones contractuales. | true |
rights_resolution_mode | enum | No | AUTO o MANUAL. Si se omite, se deriva de is_mandatory. | "MANUAL" |
medium | integer | Sí | Medio por el que se otorgó: 1 electrónico, 2 verbal, 3 físico. | 1 |
evidence_mode | enum | Sí | IMMEDIATE (evidencia en la creación) o DEFERRED (evidencia posterior). DEFERRED no válido en REDEC. | "IMMEDIATE" |
granted_date | string | No | Fecha en que el titular otorgó el consentimiento (YYYYMMDD). Si se omite, se usa la fecha de recepción. | "20260512" |
granted_time | string | No | Hora de otorgamiento (HHMMSS). | "143022" |
expiration_date | string | No | Fecha de expiración explícita (YYYYMMDD). En marcos no REDEC reemplaza la vigencia base de la plantilla para el consentimiento creado. No se acepta en REDEC. | "20260901" |
parent_consent_id | string | No | consent_token del consentimiento anterior, cuando este es una renovación. | null |
evidence | object | Condicional | Datos de la evidencia. Obligatorio si evidence_mode es IMMEDIATE. | — |
metadata | object | No | Información adicional del cliente. | — |
Datos del titular
Los campos del titular dependen de subject_type.
subject_type: NATURAL
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
subject_rut | string | Sí | RUT del titular (formato chileno con dígito verificador). |
subject_email | string | Sí | Correo de contacto. |
subject_name | string | No | Nombre del titular (texto libre). |
subject_phone | string | No | Teléfono (8–15 dígitos, prefijo + opcional). |
subject_type: JURIDICA
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
subject_rut | string | Sí | RUT de la empresa. Debe coincidir con company.company_rut. |
subject_email | string | No | Correo de contacto. |
company | object | Sí | Datos de la empresa. Ver abajo. |
Estructura de company:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
company.company_name | string | Sí | Razón social. |
company.company_rut | string | Sí | RUT de la empresa. |
company.corporate_email | string | No | Correo corporativo. |
company.legal_representatives | array | Sí | Al menos un representante legal. |
company.legal_representatives[].name | string | Sí | Nombre del representante. |
company.legal_representatives[].last_name | string | No | Apellidos. |
company.legal_representatives[].rut | string | Sí | RUT del representante. |
company.legal_representatives[].role | string | No | Cargo. |
company.grantor | object | Sí | Persona que efectivamente otorgó el consentimiento. |
company.grantor.type | enum | Sí | REPRESENTANTE_LEGAL o APODERADO. |
company.grantor.name | string | Sí | Nombre del otorgante. |
company.grantor.rut | string | Sí | RUT del otorgante. Debe existir en legal_representatives o attorneys. |
company.grantor.role | string | No | Cargo del otorgante. |
attorneys | array | No | Apoderados: [{ name, last_name, rut, role }]. |
Bloque redec
Obligatorio cuando legal_framework es REDEC.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
redec.institution_code | string | Sí | Código de institución CMF de 9 dígitos. |
redec.purpose | integer | Sí | 1 riesgo comercial, 2 riesgo crediticio. |
redec.objective | string | Sí | Objetivo "01"–"07", con cero a la izquierda. Ver Tablas de códigos. |
redec.executive_rut | string | No | RUT del ejecutivo que gestionó el consentimiento. Si se omite, se usa el de la institución. |
Objeto evidence
Obligatorio cuando evidence_mode es IMMEDIATE.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
evidence.url | string | Sí | URL HTTPS del archivo. |
evidence.hash | string | Condicional | Hash SHA-256 (64 hexadecimales). Obligatorio en modo EXTERNAL_URL_ONLY; opcional en FLOID_STORAGE. |
evidence.file_format | enum | Sí | PDF_A o MP3. |
evidence.meta_attachment | object | No | Metadatos del archivo (páginas, duración, etc.). |
Ejemplos de solicitud
REDEC, persona natural, evidencia inmediata
{
"legal_framework": "REDEC",
"internal_code": "BCH-NAT-001",
"subject_type": "NATURAL",
"subject_rut": "12345678-9",
"subject_name": "Juan Carlos García Pérez",
"subject_email": "[email protected]",
"subject_phone": "+56912345678",
"template_id": "tpl_redec_onboarding",
"is_mandatory": true,
"medium": 1,
"evidence_mode": "IMMEDIATE",
"granted_date": "20260512",
"granted_time": "143022",
"redec": {
"institution_code": "123456789",
"purpose": 2,
"objective": "02",
"executive_rut": "98765432-1"
},
"evidence": {
"url": "https://institution.com/evidence/consent-001.pdf",
"hash": "A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890",
"file_format": "PDF_A"
},
"metadata": {
"identity_validation": "biometria",
"channel": "web"
}
}
REDEC, persona jurídica
{
"legal_framework": "REDEC",
"internal_code": "BCH-JUR-001",
"subject_type": "JURIDICA",
"subject_rut": "76543210-K",
"subject_email": "[email protected]",
"template_id": "tpl_redec_empresas",
"is_mandatory": true,
"medium": 1,
"evidence_mode": "IMMEDIATE",
"company": {
"company_name": "Empresa Ejemplo S.A.",
"company_rut": "76543210-K",
"legal_representatives": [
{ "name": "María Teresa González Silva", "rut": "11111111-1", "role": "Gerente General" }
],
"grantor": {
"type": "REPRESENTANTE_LEGAL",
"name": "María Teresa González Silva",
"rut": "11111111-1",
"role": "Gerente General"
}
},
"attorneys": [
{ "name": "Carlos Andrés Fernández López", "rut": "33333333-3", "role": "Apoderado Financiero" }
],
"redec": {
"institution_code": "123456789",
"purpose": 2,
"objective": "01",
"executive_rut": "98765432-1"
},
"evidence": {
"url": "https://institution.com/evidence/consent-juridica-001.pdf",
"hash": "A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890",
"file_format": "PDF_A"
}
}
LPDP, persona natural, evidencia diferida
{
"legal_framework": "LPDP",
"internal_code": "BCH-LPDP-014",
"subject_type": "NATURAL",
"subject_rut": "12345678-9",
"subject_name": "Juan Carlos García Pérez",
"subject_email": "[email protected]",
"template_id": "tpl_lpdp_datos",
"is_mandatory": false,
"medium": 1,
"evidence_mode": "DEFERRED",
"metadata": {
"channel": "web"
}
}
LPDP con vigencia personalizada y almacenamiento Floid
{
"legal_framework": "LPDP",
"internal_code": "BCH-LPDP-020",
"subject_type": "NATURAL",
"subject_rut": "12345678-9",
"subject_email": "[email protected]",
"template_id": "tpl_lpdp_marketing",
"is_mandatory": false,
"rights_resolution_mode": "MANUAL",
"medium": 1,
"evidence_mode": "IMMEDIATE",
"expiration_date": "20260901",
"evidence": {
"url": "https://institution.com/evidence/lpdp-020.pdf",
"file_format": "PDF_A"
},
"metadata": {
"consent_type": "marketing",
"channel": "app"
}
}
En este ejemplo, evidence.hash se omite porque la institución opera en modo FLOID_STORAGE; rights_resolution_mode se fuerza a MANUAL sobre un consentimiento opcional; y expiration_date reemplaza la vigencia base definida en la plantilla.
Respuesta
La respuesta devuelve el consentimiento creado. Los campos del titular y el bloque redec aparecen según correspondan al tipo y al marco.
Campos comunes de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
code | integer | 200 en creación exitosa. |
msg | string | Mensaje de resultado. |
caseid | string | Igual al consent_token. |
data.id | integer | Identificador interno. |
data.consent_token | string | UUID del consentimiento. Referencia para operaciones posteriores. |
data.legal_framework | enum | Marco legal. |
data.internal_code | string | Código interno del cliente. |
data.subject_type | enum | Tipo de titular. |
data.subject_rut | string | RUT del titular. |
data.subject_name | string | Nombre del titular, si se entregó. |
data.subject_email | string | Correo del titular, si se entregó. |
data.subject_phone | string | Teléfono, si se entregó. |
data.template_id | string | Plantilla asociada. |
data.template_version_id | string | Versión de plantilla aplicada. |
data.tc_id | string | T&C asociado, heredado desde la plantilla o indicado en la solicitud. |
data.tc_version_id | string | Versión de T&C aplicada. |
data.tc_snapshot_url | string | URL inmutable del texto legal aceptado. null mientras se genera. |
data.is_mandatory | boolean | Obligatorio u opcional. |
data.rights_resolution_mode | enum | AUTO o MANUAL (derivado o explícito). |
data.medium | integer | Medio de otorgamiento. |
data.parent_consent_id | string | Consentimiento anterior, si es renovación; null si no. |
data.current_state | enum | Estado del consentimiento. Con evidencia diferida, un consentimiento no REDEC puede crearse como ACTIVE o PENDING_EVIDENCE, según la configuración del flujo; ambos son operativos. |
data.granted_at | timestamp | Momento de otorgamiento. Base de la vigencia. |
data.expires_at | timestamp | Momento de expiración. |
data.revoked_at | timestamp | Momento de revocación; null si no aplica. |
data.created_at | timestamp | Momento en que el sistema registró el consentimiento. |
data.validity_source | enum | Origen de la vigencia: TEMPLATE, REQUEST_OVERRIDE o REDEC_REGULATION. |
data.evidence_mode | enum | IMMEDIATE o DEFERRED. |
data.evidence | object | Datos de la evidencia vigente. En un consentimiento diferido sin archivo, puede incluir status: NOT_PROVIDED y campos de archivo en null. |
data.metadata | object | Eco de la metadata enviada. |
data.company | object | Presente solo en JURIDICA. |
data.attorneys | array | Presente solo si hay apoderados. |
Objeto evidence en la respuesta
| Campo | Descripción |
|---|---|
evidence.url | URL del archivo. |
evidence.hash | Hash SHA-256; null si aún no se ha calculado. |
evidence.file_format | PDF_A o MP3. |
evidence.status | Estado de la evidencia (PENDING, SUCCESS, FAILED, EXTERNAL, NOT_PROVIDED, etc.). |
evidence.error | Detalle del error si status es FAILED; null si no. |
evidence.uploaded_at | Momento de carga de la evidencia; null si aún no hay. |
Bloque redec en la respuesta
Presente solo cuando legal_framework es REDEC.
| Campo | Descripción |
|---|---|
redec.institution_code | Código de institución CMF. |
redec.purpose | Finalidad. |
redec.objective | Objetivo. |
redec.executive_rut | RUT del ejecutivo. |
redec.codigo_encriptado | Código encriptado NCG 540. Ver abajo. |
Objeto redec.codigo_encriptado:
| Campo | Descripción |
|---|---|
value | Hash SHA-256 de la evidencia. Mismo valor que evidence.hash. null si aún no se ha calculado. |
algorithm | Siempre SHA-256. |
source | CLIENT_PROVIDED (modo EXTERNAL_URL_ONLY) o FLOID_GENERATED (modo FLOID_STORAGE). |
Ejemplos de respuesta
REDEC natural, activo, evidencia externa
{
"code": 200,
"msg": "Consent created",
"caseid": "550e8400-e29b-41d4-a716-446655440000",
"data": {
"id": 12345,
"consent_token": "550e8400-e29b-41d4-a716-446655440000",
"legal_framework": "REDEC",
"internal_code": "BCH-NAT-001",
"subject_type": "NATURAL",
"subject_rut": "12345678-9",
"subject_name": "Juan Carlos García Pérez",
"subject_email": "[email protected]",
"subject_phone": "+56912345678",
"template_id": "tpl_redec_onboarding",
"template_version_id": "tpl_v_2026_03",
"tc_id": "tc_redec",
"tc_version_id": "tc_v_2026_01",
"tc_snapshot_url": "https://storage.floid.app/snapshots/550e8400.json",
"is_mandatory": true,
"rights_resolution_mode": "MANUAL",
"medium": 1,
"parent_consent_id": null,
"current_state": "ACTIVE",
"granted_at": "2026-05-12T14:30:22.000Z",
"expires_at": "2026-06-02T23:59:59.000Z",
"revoked_at": null,
"created_at": "2026-05-12T14:30:22.000Z",
"validity_source": "REDEC_REGULATION",
"evidence_mode": "IMMEDIATE",
"evidence": {
"url": "https://institution.com/evidence/consent-001.pdf",
"hash": "A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890",
"file_format": "PDF_A",
"status": "EXTERNAL",
"error": null,
"uploaded_at": "2026-05-12T14:30:25.000Z"
},
"metadata": {
"identity_validation": "biometria",
"channel": "web"
},
"redec": {
"institution_code": "123456789",
"purpose": 2,
"objective": "02",
"executive_rut": "98765432-1",
"codigo_encriptado": {
"value": "A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890A1B2C3D4E5F67890",
"algorithm": "SHA-256",
"source": "CLIENT_PROVIDED"
}
}
}
}
REDEC con almacenamiento Floid (hash en proceso)
Cuando la institución opera en modo FLOID_STORAGE, el hash llega en null y se completa segundos después.
{
"code": 200,
"msg": "Consent created",
"caseid": "660f9511-f5bd-4bc3-a5e1-065f02340e71",
"data": {
"id": 12346,
"consent_token": "660f9511-f5bd-4bc3-a5e1-065f02340e71",
"legal_framework": "REDEC",
"internal_code": "BCH-JUR-001",
"subject_type": "JURIDICA",
"subject_rut": "76543210-K",
"subject_email": "[email protected]",
"template_id": "tpl_redec_empresas",
"template_version_id": "tpl_v_2026_03",
"tc_id": "tc_redec",
"tc_version_id": "tc_v_2026_01",
"tc_snapshot_url": "https://storage.floid.app/snapshots/660f9511.json",
"is_mandatory": true,
"rights_resolution_mode": "MANUAL",
"medium": 1,
"parent_consent_id": null,
"current_state": "ACTIVE",
"granted_at": "2026-05-12T14:30:22.000Z",
"expires_at": "2026-06-02T23:59:59.000Z",
"revoked_at": null,
"created_at": "2026-05-12T14:30:22.000Z",
"validity_source": "REDEC_REGULATION",
"evidence_mode": "IMMEDIATE",
"evidence": {
"url": "https://institution.com/evidence/consent-juridica-001.pdf",
"hash": null,
"file_format": "PDF_A",
"status": "PENDING",
"error": null,
"uploaded_at": null
},
"metadata": {},
"redec": {
"institution_code": "123456789",
"purpose": 2,
"objective": "01",
"executive_rut": "98765432-1",
"codigo_encriptado": {
"value": null,
"algorithm": "SHA-256",
"source": "FLOID_GENERATED"
}
},
"company": {
"company_name": "Empresa Ejemplo S.A.",
"company_rut": "76543210-K",
"legal_representatives": [
{ "name": "María Teresa González Silva", "rut": "11111111-1", "role": "Gerente General" }
],
"grantor": {
"type": "REPRESENTANTE_LEGAL",
"name": "María Teresa González Silva",
"rut": "11111111-1",
"role": "Gerente General"
}
},
"attorneys": [
{ "name": "Carlos Andrés Fernández López", "rut": "33333333-3", "role": "Apoderado Financiero" }
]
}
}
En este ejemplo, current_state es PENDING_EVIDENCE porque la plataforma identifica explícitamente que el archivo probatorio aún no se ha incorporado. Según la configuración del flujo, un consentimiento no REDEC con evidencia diferida también puede crearse como ACTIVE; ambos estados son operativos.
PENDING_EVIDENCE no aplica a REDEC, ya que ese marco exige evidencia desde la creación. Tampoco hay bloque redec en este ejemplo porque el marco es LPDP, ni datos de titular porque es anónimo. Este ejemplo no representa preferencias de cookies.
Validaciones principales
internal_codeúnico por tenant.template_iddebe existir y pertenecer al tenant.tc_idobligatorio solo si la plantilla no tiene un T&C asociado.is_mandatoryobligatorio, sin valor por defecto.- En
JURIDICA:subject_rutigual acompany.company_rut, al menos un representante legal, y el RUT del otorgante presente enlegal_representativesoattorneys. - En
NATURAL:subject_emailobligatorio. - En REDEC: bloque
redecobligatorio yevidence_modedistinto deDEFERRED. - En modo de almacenamiento
EXTERNAL_URL_ONLY:evidence.hashobligatorio.
Una creación exitosa emite el evento consent.created.
Tablas de códigos
Códigos de objetivo (redec.objective)
redec.objective)| Código | Descripción |
|---|---|
"01" | Créditos comerciales |
"02" | Créditos de consumo |
"03" | Créditos para vivienda |
"04" | Operaciones financieras |
"05" | Instrumentos de deuda adquiridos |
"06" | Créditos contingentes |
"07" | Cupos de líneas de crédito de libre disposición |
Si aplica más de un objetivo, se crea un consentimiento separado por cada uno.
Códigos de finalidad (redec.purpose)
redec.purpose)| Código | Descripción |
|---|---|
1 | Evaluación de riesgo comercial |
2 | Evaluación de riesgo crediticio |
Códigos de medio (medium)
medium)| Código | Descripción |
|---|---|
1 | Electrónico |
2 | Verbal (registro de audio) |
3 | Físico (respaldo documental) |
Modos de almacenamiento de evidencia
Se configuran por institución (no en el request).
FLOID_STORAGE
FLOID_STORAGE- Floid descarga el archivo desde
evidence.url. - Floid calcula el hash SHA-256 si no se envía.
- Floid almacena el archivo en Google Cloud Storage.
evidence.hashes opcional.
EXTERNAL_URL_ONLY
EXTERNAL_URL_ONLY- Floid no descarga el archivo.
- El cliente almacena el archivo.
- Floid solo guarda la URL y el hash.
evidence.hashes obligatorio.
Updated 7 days ago
