Crear Consentimiento

Crear Consentimiento

POST /cl/consent_manager/create_consent

Registra un consentimiento STANDARD bajo cualquiera de los marcos legales soportados.

AmbienteURL
Producciónhttps://api.floid.app/cl/consent_manager/create_consent
Sandboxhttps://sandbox.floid.app/cl/consent_manager/create_consent

Headers requeridos

Authorization: Bearer {{TOKEN}}
Content-Type: application/json

El client_id se 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 cuando legal_framework es REDEC.
  • Objeto evidence — obligatorio cuando la evidencia se entrega en la creación.
  • Objeto metadata — opcional, para información adicional del cliente.

Campos comunes

CampoTipoRequeridoDescripciónEjemplo
legal_frameworkenumMarco legal del consentimiento: REDEC, LPDP o SFA. Determina qué bloque específico se exige."REDEC"
internal_codestringCó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_typeenumTipo de titular: NATURAL, JURIDICA ."NATURAL"
template_idstringIdentificador de una plantilla activa que originará el consentimiento."tpl_redec_onboarding"
template_version_idstringNoVersión activa específica de la plantilla. Si se omite, se usa la versión activa."tpl_v_2026_03"
tc_idstringCondicionalIdentificador del T&C. Obligatorio solo si la plantilla no tiene uno asociado."tc_privacidad"
tc_version_idstringNoVersión específica del T&C. Si se omite, se utiliza su versión activa."tc_v_2026_01"
is_mandatorybooleanIndica 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_modeenumNoAUTO o MANUAL. Si se omite, se deriva de is_mandatory."MANUAL"
mediumintegerMedio por el que se otorgó: 1 electrónico, 2 verbal, 3 físico.1
evidence_modeenumIMMEDIATE (evidencia en la creación) o DEFERRED (evidencia posterior). DEFERRED no válido en REDEC."IMMEDIATE"
granted_datestringNoFecha en que el titular otorgó el consentimiento (YYYYMMDD). Si se omite, se usa la fecha de recepción."20260512"
granted_timestringNoHora de otorgamiento (HHMMSS)."143022"
expiration_datestringNoFecha 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_idstringNoconsent_token del consentimiento anterior, cuando este es una renovación.null
evidenceobjectCondicionalDatos de la evidencia. Obligatorio si evidence_mode es IMMEDIATE.
metadataobjectNoInformación adicional del cliente.

Datos del titular

Los campos del titular dependen de subject_type.

subject_type: NATURAL

CampoTipoRequeridoDescripción
subject_rutstringRUT del titular (formato chileno con dígito verificador).
subject_emailstringCorreo de contacto.
subject_namestringNoNombre del titular (texto libre).
subject_phonestringNoTeléfono (8–15 dígitos, prefijo + opcional).

subject_type: JURIDICA

CampoTipoRequeridoDescripción
subject_rutstringRUT de la empresa. Debe coincidir con company.company_rut.
subject_emailstringNoCorreo de contacto.
companyobjectDatos de la empresa. Ver abajo.

Estructura de company:

CampoTipoRequeridoDescripción
company.company_namestringRazón social.
company.company_rutstringRUT de la empresa.
company.corporate_emailstringNoCorreo corporativo.
company.legal_representativesarrayAl menos un representante legal.
company.legal_representatives[].namestringNombre del representante.
company.legal_representatives[].last_namestringNoApellidos.
company.legal_representatives[].rutstringRUT del representante.
company.legal_representatives[].rolestringNoCargo.
company.grantorobjectPersona que efectivamente otorgó el consentimiento.
company.grantor.typeenumREPRESENTANTE_LEGAL o APODERADO.
company.grantor.namestringNombre del otorgante.
company.grantor.rutstringRUT del otorgante. Debe existir en legal_representatives o attorneys.
company.grantor.rolestringNoCargo del otorgante.
attorneysarrayNoApoderados: [{ name, last_name, rut, role }].

Bloque redec

Obligatorio cuando legal_framework es REDEC.

CampoTipoRequeridoDescripción
redec.institution_codestringCódigo de institución CMF de 9 dígitos.
redec.purposeinteger1 riesgo comercial, 2 riesgo crediticio.
redec.objectivestringObjetivo "01""07", con cero a la izquierda. Ver Tablas de códigos.
redec.executive_rutstringNoRUT del ejecutivo que gestionó el consentimiento. Si se omite, se usa el de la institución.

Objeto evidence

Obligatorio cuando evidence_mode es IMMEDIATE.

CampoTipoRequeridoDescripción
evidence.urlstringURL HTTPS del archivo.
evidence.hashstringCondicionalHash SHA-256 (64 hexadecimales). Obligatorio en modo EXTERNAL_URL_ONLY; opcional en FLOID_STORAGE.
evidence.file_formatenumPDF_A o MP3.
evidence.meta_attachmentobjectNoMetadatos 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

CampoTipoDescripción
codeinteger200 en creación exitosa.
msgstringMensaje de resultado.
caseidstringIgual al consent_token.
data.idintegerIdentificador interno.
data.consent_tokenstringUUID del consentimiento. Referencia para operaciones posteriores.
data.legal_frameworkenumMarco legal.
data.internal_codestringCódigo interno del cliente.
data.subject_typeenumTipo de titular.
data.subject_rutstringRUT del titular.
data.subject_namestringNombre del titular, si se entregó.
data.subject_emailstringCorreo del titular, si se entregó.
data.subject_phonestringTeléfono, si se entregó.
data.template_idstringPlantilla asociada.
data.template_version_idstringVersión de plantilla aplicada.
data.tc_idstringT&C asociado, heredado desde la plantilla o indicado en la solicitud.
data.tc_version_idstringVersión de T&C aplicada.
data.tc_snapshot_urlstringURL inmutable del texto legal aceptado. null mientras se genera.
data.is_mandatorybooleanObligatorio u opcional.
data.rights_resolution_modeenumAUTO o MANUAL (derivado o explícito).
data.mediumintegerMedio de otorgamiento.
data.parent_consent_idstringConsentimiento anterior, si es renovación; null si no.
data.current_stateenumEstado 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_attimestampMomento de otorgamiento. Base de la vigencia.
data.expires_attimestampMomento de expiración.
data.revoked_attimestampMomento de revocación; null si no aplica.
data.created_attimestampMomento en que el sistema registró el consentimiento.
data.validity_sourceenumOrigen de la vigencia: TEMPLATE, REQUEST_OVERRIDE o REDEC_REGULATION.
data.evidence_modeenumIMMEDIATE o DEFERRED.
data.evidenceobjectDatos de la evidencia vigente. En un consentimiento diferido sin archivo, puede incluir status: NOT_PROVIDED y campos de archivo en null.
data.metadataobjectEco de la metadata enviada.
data.companyobjectPresente solo en JURIDICA.
data.attorneysarrayPresente solo si hay apoderados.

Objeto evidence en la respuesta

CampoDescripción
evidence.urlURL del archivo.
evidence.hashHash SHA-256; null si aún no se ha calculado.
evidence.file_formatPDF_A o MP3.
evidence.statusEstado de la evidencia (PENDING, SUCCESS, FAILED, EXTERNAL, NOT_PROVIDED, etc.).
evidence.errorDetalle del error si status es FAILED; null si no.
evidence.uploaded_atMomento de carga de la evidencia; null si aún no hay.

Bloque redec en la respuesta

Presente solo cuando legal_framework es REDEC.

CampoDescripción
redec.institution_codeCódigo de institución CMF.
redec.purposeFinalidad.
redec.objectiveObjetivo.
redec.executive_rutRUT del ejecutivo.
redec.codigo_encriptadoCódigo encriptado NCG 540. Ver abajo.

Objeto redec.codigo_encriptado:

CampoDescripción
valueHash SHA-256 de la evidencia. Mismo valor que evidence.hash. null si aún no se ha calculado.
algorithmSiempre SHA-256.
sourceCLIENT_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_id debe existir y pertenecer al tenant.
  • tc_id obligatorio solo si la plantilla no tiene un T&C asociado.
  • is_mandatory obligatorio, sin valor por defecto.
  • En JURIDICA: subject_rut igual a company.company_rut, al menos un representante legal, y el RUT del otorgante presente en legal_representatives o attorneys.
  • En NATURAL: subject_email obligatorio.
  • En REDEC: bloque redec obligatorio y evidence_mode distinto de DEFERRED.
  • En modo de almacenamiento EXTERNAL_URL_ONLY: evidence.hash obligatorio.

Una creación exitosa emite el evento consent.created.

Tablas de códigos

Códigos de objetivo (redec.objective)

CódigoDescripció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)

CódigoDescripción
1Evaluación de riesgo comercial
2Evaluación de riesgo crediticio

Códigos de medio (medium)

CódigoDescripción
1Electrónico
2Verbal (registro de audio)
3Físico (respaldo documental)

Modos de almacenamiento de evidencia

Se configuran por institución (no en el request).

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.hash es opcional.

EXTERNAL_URL_ONLY

  • Floid no descarga el archivo.
  • El cliente almacena el archivo.
  • Floid solo guarda la URL y el hash.
  • evidence.hash es obligatorio.