Referencia de la APIDocumentos

Documentos

Referencia de la API de documentos de Certivant: carga multiparte de pasaportes, documentos de identidad oficiales, selfis y comprobantes de domicilio en una solicitud KYC, obtención de URL de descarga firmadas, y consulta de los tipos de documento y los valores de estado admitidos.

Los documentos se adjuntan a una solicitud, no directamente a un solicitante. Cada carga acerca la solicitud principal a «lista para enviar»: cuando pendingDocTypes está vacío, puede enviar la solicitud para su procesamiento.

Cargar un documento

POST /api/v1/kyc/requests/:requestId/documents    Ámbito: kyc:write

Carga multiparte. Pase documentType (y side, si corresponde) como parámetros de consulta, y el archivo en un campo de formulario file.

Parámetros de consulta

ParámetroTipoObligatorioNotas
documentTypeenumsíConsulte la lista más abajo
sideenumcondicionalfront o back. Obligatorio para GOVERNMENT_ID

Cuerpo del formulario

CampoTipoNotas
filebinarioEl archivo del documento. Máximo 10 MB. Tipos MIME: image/jpeg, image/png, image/webp, application/pdf

Tipos de documento

ValorDescripción¿Dos caras?
GOVERNMENT_IDDocumento nacional de identidad, permiso de conducir, permiso de residenciaSí
PASSPORTPágina de datos biográficos del pasaporteNo
SELFIEFoto en vivo del solicitante para comparación facial y prueba de vidaNo
PROOF_OF_ADDRESSFactura de servicios, extracto bancario, carta oficial (de hace 3 meses o menos)No
CERTIFICATE_OF_INCORPORATIONKYB: prueba de que la empresa existeNo
COMPANY_OWNERSHIP_STRUCTUREKYB: organigrama o libro de accionistasNo
BANK_STATEMENTExtracto de cuenta para comprobaciones del origen de los fondosNo
OTHERCualquier otro documento no listado: úselo con moderación; las comprobaciones no se ejecutan sobre documentos OTHERNo

Suba siempre la versión de mayor resolución que tenga. Las comprobaciones de OCR y de autenticidad se degradan rápidamente por debajo de 1024 px en el lado más largo. Un JPEG con calidad 80 o superior es adecuado; evite comprimirlo previamente «para ahorrar ancho de banda».

Ejemplo

# Upload the front of a driver's license
curl -X POST "https://app.certivant.com/api/v1/kyc/requests/req_01J.../documents?documentType=GOVERNMENT_ID&side=front" \
  -H "Authorization: Bearer ck_live_..." \
  -F "file=@/path/to/license-front.jpg"

Respuesta (201)

{
  "id": "doc_01J...",
  "documentType": "GOVERNMENT_ID",
  "side": "front",
  "status": "pending",
  "fileSize": 412938,
  "mimeType": "image/jpeg",
  "requestStatus": "PENDING_UPLOAD",
  "pendingDocTypes": ["GOVERNMENT_ID", "SELFIE"],
  "message": "Document uploaded. Front of GOVERNMENT_ID received; back of GOVERNMENT_ID still required."
}

La respuesta siempre indica lo que falta mediante pendingDocTypes. Cuando ese array está vacío, su siguiente llamada debe ser POST /requests/:id/submit.

Valores de estado del documento

  • pending: subido, pero aún no procesado (solo ocurre antes de enviar la solicitud).
  • verified: superó todas las comprobaciones de autenticidad tras enviarse la solicitud.
  • failed: no superó una comprobación de autenticidad. Revise los registros de comprobación vinculados en GET /requests/:id para ver el motivo concreto.
  • corrupted: el archivo no pudo decodificarse. Vuelva a subirlo.

Errores

  • 400 BAD_REQUEST:
    • El archivo supera los 10 MB.
    • Tipo MIME no admitido.
    • Falta side para GOVERNMENT_ID.
    • documentType no permitido por la configuración KYC de la organización.
  • 404 NOT_FOUND: la solicitud principal no existe en esta organización.
  • 409 CONFLICT: la solicitud no está en PENDING_UPLOAD. No puede añadir documentos a una solicitud que ya se ha enviado.

Obtener una URL de descarga

GET /api/v1/kyc/requests/:requestId/documents/:docId/url    Ámbito: kyc:read

Los documentos se almacenan en un almacenamiento de objetos privado. Para ver o descargar uno, obtenga una URL firmada de corta duración.

Respuesta

{
  "url": "https://storage.certivant.com/kyc/org_.../req_.../doc_....jpg?X-Amz-Signature=...",
  "expiresIn": 900
}

expiresIn está en segundos: la URL es válida durante 15 minutos. Genere una nueva cada vez que necesite mostrar un documento; no las almacene en caché.

La url devuelta es una URL de almacenamiento prefirmada (S3 / Azure Blob / GCS). Se abre directamente en una pestaña del navegador y se muestra sin cabecera Authorization:

  • Imágenes (image/jpeg, image/png, image/webp) → <img src="{url}" />
  • PDF (application/pdf) → <iframe src="{url}" /> u <object data="{url}" type="application/pdf" />

Compruebe el mimeType de cada documento (de GET /requests/:id) para decidir cómo mostrarlo.

Por definición, las URL firmadas no requieren autenticación: cualquiera que tenga la URL puede ver el documento hasta que caduque. Nunca las registre en logs, nunca las incluya en correos y nunca las exponga en el lado del cliente sin una comprobación de autorización por su parte.


Descargar los bytes en bruto

GET /api/v1/kyc/requests/:requestId/documents/:docId/download    Ámbito: kyc:read

Devuelve directamente los bytes del archivo del documento, con el Content-Type almacenado (image/jpeg, image/png, image/webp o application/pdf) y Content-Disposition: inline. Sin URL firmada, sin redirección.

curl -L "https://app.certivant.com/api/v1/kyc/requests/req_01J.../documents/doc_01J.../download" \
  -H "Authorization: Bearer ck_live_..." \
  -o government_id_front.jpg

Prefiera esta opción a la ruta de URL firmada cuando muestre documentos dentro de su propio panel:

  • Funciona con todos los backends de almacenamiento, incluido el disco local, cuya URL firmada /uploads/… solo es accesible desde dentro del host de Certivant y devolvería 404 desde otro origen.
  • Hágala pasar por su backend y sírvala desde el mismo origen (<img src="/your-proxy/doc"> para imágenes, <iframe> para PDF). La clave Authorization: Bearer permanece en el servidor y nunca llega al navegador.
  • Nunca se expone ninguna URL de almacenamiento, así que no hay nada que filtrar ni que caduque.

¿Cuál debo usar? Use /url cuando no le importe enviar al navegador un enlace público de almacenamiento de corta duración (almacenamiento en la nube, p. ej. S3/Azure). Use /download cuando quiera mantenerlo todo detrás de su propia autenticación, o cuando Certivant esté usando almacenamiento en disco local. La ruta /download es la opción predeterminada y más segura para una consola de partner.


Reemplazar documentos

No puede editar un documento en su lugar. Si el solicitante subió una foto borrosa y quiere una nueva toma:

  1. La solicitud debe estar en PENDING_UPLOAD (o debe reenviar primero una solicitud rechazada para eliminar los documentos anteriores).
  2. Suba un nuevo documento con el mismo documentType y side. El anterior queda reemplazado: solo se usa la versión más reciente para el procesamiento.

Esta regla existe por la integridad de la auditoría: un historial inmutable de cada carga se conserva en el registro de auditoría, incluso cuando cambia el documento activo.


Listar los documentos de una solicitud

No existe un endpoint de listado de documentos independiente. La lista completa se incluye en la respuesta de GET /api/v1/kyc/requests/:id:

{
  "id": "req_...",
  "documents": [
    { "id": "doc_a", "documentType": "GOVERNMENT_ID", "side": "front", "status": "verified", ... },
    { "id": "doc_b", "documentType": "GOVERNMENT_ID", "side": "back", "status": "verified", ... },
    { "id": "doc_c", "documentType": "SELFIE", "status": "verified", ... }
  ]
}

Recorra documents y llame a /download (para pasar los bytes por su backend) o a /url (para un enlace firmado) en cualquier documento concreto que quiera mostrar.

  • Solicitudes KYC: el endpoint principal al que se adjuntan sus documentos.
  • Sesiones alojadas: permita que Certivant recopile los documentos directamente del solicitante.
  • Esquemas: enumeración completa de documentType, status y valores relacionados.