Colombia — Código de barras de cédula (PDF417)
Lee el código de barras PDF417 impreso en el reverso de una cédula de ciudadanía (CC) colombiana. Usa este endpoint cuando ya tienes una captura del dorso y necesitas los campos de identidad codificados en el código, con comparación opcional contra datos que obtuviste por OCR, formulario o una consulta previa a /v2/co/cedula.
No es una consulta de identidad ante Registraduría o Procuraduría. Para resolver nombres oficiales por número de documento, usa Ciudadano colombiano (GET/POST /v2/co/cedula). Para validación de código de barras dentro de flujos SmartScan, consulta Scan Agent — Código de barras colombiano.
Este endpoint está diseñado específicamente como un mecanismo crítico contra el fraude de identidad. En intentos de suplantación, los atacantes suelen alterar el texto impreso o la foto en el frente de la cédula, pero no pueden falsificar el código de barras bidimensional PDF417 del reverso. Al contrastar el código contra el OCR del frente, cualquier manipulación física queda en evidencia de inmediato (verdict: "mismatch"). Del mismo modo, si intentan alterar o adulterar los módulos del código de barras, fallan los algoritmos de corrección de error Reed-Solomon, impidiendo su lectura (verdict: "unreadable").
Endpoint
POST https://api.verifik.co/v2/co/cedula/barcode
Misma ruta en el host de la app: POST https://verifik.app/v2/co/cedula/barcode.
Headers
| Name | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
backImage | string | Sí | Reverso de la cédula en base64 (con o sin prefijo data:) o URL HTTPS pública. El código de barras debe verse nítido. |
documentType | string | No | Tipo de documento. Por defecto CC. |
documentNumber | string | No | Contraste: NUIP / número a comparar con el payload del código. |
firstName | string | No | Contraste: nombre(s) a comparar. |
lastName | string | No | Contraste: apellido(s) a comparar. |
gender | string | No | Contraste: género a comparar. |
dateOfBirth | string | No | Contraste: fecha de nacimiento (p. ej. DD/MM/YYYY). |
bloodType | string | No | Contraste: tipo de sangre. |
crossCheck | object | No | Alternativa a los campos planos de contraste. Mismas claves: documentNumber, firstName, lastName, gender, dateOfBirth, bloodType. |
barcodeReadAttempts | number | No | Límite opcional de reintentos internos de lectura cuando la imagen es difícil (reflejos, desenfoque). |
Solo decodificación: envía backImage (y opcionalmente documentType). data.verdict será decoded o unreadable.
Con contraste: envía backImage más los campos de contraste (planos o dentro de crossCheck). data.verdict será confirmed, mismatch o unreadable.
Solicitud
- cURL
- Node.js
- Python
curl -X POST "https://api.verifik.co/v2/co/cedula/barcode" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VERIFIK_TOKEN" \
-d '{
"backImage": "https://example.com/ejemplo-reverso-cedula.jpg",
"documentType": "CC"
}'
import axios from "axios";
const { data } = await axios.post(
"https://api.verifik.co/v2/co/cedula/barcode",
{
backImage: "https://example.com/ejemplo-reverso-cedula.jpg",
documentType: "CC",
documentNumber: "1234567890",
firstName: "MARIA",
lastName: "LOPEZ GARCIA",
gender: "F",
dateOfBirth: "15/03/1992",
bloodType: "O+",
},
{
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.VERIFIK_TOKEN}`,
},
}
);
console.log(data);
import os, requests
url = "https://api.verifik.co/v2/co/cedula/barcode"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.getenv('VERIFIK_TOKEN')}",
}
payload = {
"backImage": "https://example.com/ejemplo-reverso-cedula.jpg",
"documentType": "CC",
"crossCheck": {
"documentNumber": "1234567890",
"firstName": "MARIA",
"lastName": "LOPEZ GARCIA",
"gender": "F",
"dateOfBirth": "15/03/1992",
"bloodType": "O+",
},
}
r = requests.post(url, json=payload, headers=headers)
print(r.json())
Respuesta
data incluye siempre attempts (intentos de lectura). Los campos del código usan nomenclatura al estilo Registraduría cuando aplica.
| Campo | Cuándo | Descripción |
|---|---|---|
verdict | Siempre | decoded o unreadable (solo decodificación), o confirmed, mismatch, unreadable (con contraste). |
barcode | Si no es unreadable | Campos parseados del código (tabla inferior). |
decoded | Decodificación exitiva | Mismo contenido semántico que barcode en modo solo decodificación. |
matchScores | Contraste | Puntajes de similitud por campo enviado. |
disagreements | Contraste | Campos que no superaron el umbral. |
reason | Opcional | Detalle cuando verdict es unreadable. |
attempts | Siempre | Intentos internos de lectura del código. |
Campos de barcode:
| Campo | Descripción |
|---|---|
documentNumber | NUIP / número de documento |
primerNombre | Primer nombre |
segundoNombre | Segundo nombre (puede ir vacío) |
primerApellido | Primer apellido |
segundoApellido | Segundo apellido (puede ir vacío) |
gender | Género |
dateOfBirth | Fecha de nacimiento |
bloodType | Tipo de sangre |
fullName | Nombre completo armado desde el código |
- 200 (decoded)
- 200 (confirmed)
- 409
{
"data": {
"verdict": "decoded",
"attempts": 1,
"decoded": {
"documentNumber": "1234567890",
"primerNombre": "MARIA",
"segundoNombre": "ELENA",
"primerApellido": "LOPEZ",
"segundoApellido": "GARCIA",
"gender": "F",
"dateOfBirth": "15/03/1992",
"bloodType": "O+",
"fullName": "MARIA ELENA LOPEZ GARCIA"
},
"barcode": {
"documentNumber": "1234567890",
"primerNombre": "MARIA",
"segundoNombre": "ELENA",
"primerApellido": "LOPEZ",
"segundoApellido": "GARCIA",
"gender": "F",
"dateOfBirth": "15/03/1992",
"bloodType": "O+",
"fullName": "MARIA ELENA LOPEZ GARCIA"
}
},
"signature": {
"message": "Certified by Verifik.co",
"dateTime": "October 21, 2026 2:30 PM"
},
"id": "BC9A2"
}
{
"data": {
"verdict": "confirmed",
"attempts": 2,
"barcode": {
"documentNumber": "1234567890",
"primerNombre": "MARIA",
"segundoNombre": "ELENA",
"primerApellido": "LOPEZ",
"segundoApellido": "GARCIA",
"gender": "F",
"dateOfBirth": "15/03/1992",
"bloodType": "O+",
"fullName": "MARIA ELENA LOPEZ GARCIA"
},
"matchScores": {
"documentNumber": 1,
"firstName": 0.98,
"lastName": 0.97,
"gender": 1,
"dateOfBirth": 1,
"bloodType": 1
},
"disagreements": []
},
"signature": {
"message": "Certified by Verifik.co",
"dateTime": "October 21, 2026 2:31 PM"
},
"id": "BC9A3"
}
{
"code": "MissingParameter",
"message": "backImage is required"
}
Prevención de Fraude: Detección de Cédulas Alteradas o Falsificadas
En fraudes con cédulas de ciudadanía colombianas, los estafadores rara vez pueden generar un código PDF417 genuino desde cero. La modalidad habitual consiste en adulterar el texto impreso o la foto frontal de una cédula auténtica o robada (modificando el número de documento o suplantando los nombres).
Dos vectores de ataque y por qué fracasan
-
Alteración del frente (Nombres o NUIP manipulados)
- El atacante altera los datos visibles frontales, pero el código de barras PDF417 del reverso permanece intacto con los datos auténticos registrados por la Registraduría Nacional del Estado Civil.
- Al enviar los datos extraídos del frente vía
crossCheck(o activar la validación en SmartScan / SmartEnroll), Verifik contrasta el frente contra el contenido del código. - Cualquier discrepancia produce
verdict: "mismatch"e identifica exactamente los campos adulterados endisagreements(por ejemplo["documentNumber", "firstName"]). En SmartEnroll y registros de aplicación, esto detiene el onboarding automático y remite el registro a verificación manual (NEEDS_MANUAL_VERIFICATION).
-
Manipulación o inyección de códigos falsos
- Si intentan alterar físicamente, tachar o modificar los pixeles del código bidimensional para acomodarlo a la información fraudulenta del frente, fallan las palabras clave de corrección de error Reed-Solomon.
- El motor no logra reconstruir la matriz y responde
verdict: "unreadable"conreason: "barcode_not_detected". - Si intentan inyectar un código generado artificialmente, el parser de Verifik valida la sintaxis y codificación oficial de la Registraduría; cualquier inconsistencia es rechazada o genera
mismatchfrente a los datos del titular.
En procesos de vinculación digital (KYC), captura siempre el frente y el dorso de la cédula colombiana. Todo resultado con verdict: "mismatch" debe ser considerado un indicador explícito de documento adulterado o fraudulento.
Facturación
- Las respuestas HTTP 200 se cobran, incluso cuando
data.verdictesunreadable. - Los errores de validación HTTP 409 no se cobran, según la Política de facturación y consumo de créditos.
- Los montos de crédito dependen de la tarificación configurada en tu cuenta (panel, Postman o ejecutivo de cuenta). Esta página no publica un precio fijo.
Notas
- Usa imagen del reverso con el PDF417 completo; solo el frente devolverá
unreadable. backImageacepta base64 o URL HTTPS como otros endpoints de visión de Verifik.- El contraste compara tus valores con el payload del código; no invoca
/v2/co/cedulani Registraduría. - Relacionado: Guía de documentos de identidad · Scan Agent SmartScan · Validación de documento en registro de aplicación.