Short answer: A Colombia KYC API flow with Verifik combines the cédula lookup (GET /v2/co/cedula), the Registraduría validity certificate, a face match with liveness and, depending on risk, National Police, Attorney General’s Office, Comptroller and PEP checks. Every call uses a Bearer token and is paid with smartCHECK credits from $49 a month.
If you are looking for a Colombia KYC API, you don’t need a single endpoint but a layered flow. This guide, updated in November 2026, is the map: it brings together the 10 checks Verifik offers to know a Colombian customer, explains which official source each one queries, and links to the detailed guide for each lookup. If you only need to validate the document, start with Colombian ID (CC) verification.
Note: this article summarizes official rules for information only and is not legal advice. Check your case with your compliance officer.
What KYC means in Colombia and why it matters in 2026
KYC (know your customer) is the set of controls you run to know who your customer is before giving them a product. In Colombia those controls rest on three frameworks:
- Anti-money laundering. Entities supervised by the Financial Superintendence (SFC) apply SARLAFT, which requires identifying and knowing the customer with a risk-based approach. Companies supervised by the Superintendence of Companies have an equivalent regime (SAGRILAFT).
- Identity theft. Law 2573 of 2026 requires telcos, financial or credit entities and businesses with that competence to adopt “sufficient and reasonable” measures to verify identity. We summarize it on our Law 2573 compliance page.
- Personal data. If you store cédula data, selfies or background records, Law 1581 of 2012 applies: you need the data subject’s authorization and a clear purpose.
The 10 checks in a Colombian KYC flow
Each check answers a different question. This table summarizes which endpoint to use and what it returns according to Verifik’s official documentation:
| Question | Endpoint | What you send | What it returns |
|---|---|---|---|
| Does the cédula exist and who owns it? | GET /v2/co/cedula | documentType (CC or PPT) and documentNumber | Full name, first names, last names and a Verifik signature |
| Is the cédula valid at the National Civil Registry (Registraduría Nacional del Estado Civil)? | GET /v2/co/registraduria/certificado | documentNumber and date (issue date, DD/MM/YYYY) | novedad (for example VIGENTE), issue date and place, verification code and PDF |
| Does the foreign resident hold a valid foreigner ID (CE)? | GET /v2/co/foreigner-id/ce | documentNumber and expeditionDate (DD/MM/YYYY) | Name, status (for example VIGENTE) and expiration |
| Is the person on camera the document holder? | POST /v2/face-recognition/compare-with-liveness | probe (selfie), gallery and thresholds | Comparison score and liveness result |
| Any pending matters with judicial authorities? (National Police) | GET /v2/co/policia/consultar | documentType (CC, CE, PPT, PA, DP) and documentNumber | Name and the official police record certificate text |
| Any pending corrective measures? (RNMC) | GET /v2/co/policia/rnmc | documentType, documentNumber and issue date | List of corrective measures with status, municipality and file number |
| Any disciplinary sanctions? (Attorney General’s Office, Procuraduría) | GET /v2/co/procuraduria/antecedentes | documentType (CC, PEP, CE) and documentNumber | hasRecord, legend and sanctions |
| Any fiscal liability? (Comptroller General, Contraloría) | GET /v2/co/contraloria/certificado | documentType (CC, CE, PA, PEP) and documentNumber | Search date and PDF certificate |
| Is this a politically exposed person (AML)? | GET /v2/co/politically-exposed-persons | documentType (CC or NIT) and documentNumber | Declarations with entity, position and publication date; 404 when there is no match |
| Can they drive? (mobility, delivery, rentals) | GET /v2/co/runt/conductor | documentType (CC, CE, PA, PPT) and documentNumber | Driver status, licenses, categories and expiration dates |
Each lookup has its own detailed guide: ID verification with the cédula de ciudadanía, Colombian foreigner IDs, police record checks, RNMC corrective measures, Contraloría certificate, INPEC prison records and driver’s licenses.
Watch the acronyms: “PEP” appears twice. In /v2/co/politically-exposed-persons it means a politically exposed person (AML); as documentType=PEP in the Procuraduría or Contraloría lookups it is the Special Stay Permit (Permiso Especial de Permanencia), an immigration document.
Recommended flow, step by step
This order cuts cost and friction, because each step only runs if the previous one passed:
- Data capture and authorization. Ask for document type and number and the issue date, and record the data-processing authorization (Law 1581).
- Document. Call
/v2/co/cedulaand comparefullNamewith what the customer typed. For foreigners, use/v2/co/foreigner-id/ce. - Validity. Call
/v2/co/registraduria/certificadoand approve only ifnovedadis VIGENTE; any other value goes to manual review. - Biometrics. Ask for a selfie and call
/v2/face-recognition/compare-with-liveness. - Lists and records by risk. PEP for financial products; Police, RNMC, Procuraduría and Contraloría for hiring, lending or suppliers.
- Decision and evidence. Approve, reject or send to review. Store the
idandsignatureof every response: they help with the document check Law 2573 requires.
How to integrate it with the Verifik API
Every call goes to https://api.verifik.co with your token in the Authorization: Bearer header. The samples use dummy data in the response shape of the official documentation.
Step 1: validate the cédula
The Colombia identity documentation asks for documentType (CC or PPT) and documentNumber:
curl -G "https://api.verifik.co/v2/co/cedula" \
-H "Accept: application/json" \
-H "Authorization: Bearer $VERIFIK_TOKEN" \
--data-urlencode "documentType=CC" \
--data-urlencode "documentNumber=123456789"Sample 200 response:
{
"data": {
"arrayName": [
"JUAN",
"CARLOS",
"PEREZ",
"GOMEZ"
],
"documentNumber": "123456789",
"documentType": "CC",
"firstName": "JUAN CARLOS",
"fullName": "JUAN CARLOS PEREZ GOMEZ",
"lastName": "PEREZ GOMEZ"
},
"signature": {
"dateTime": "November 3, 2026 9:15 AM",
"message": "Certified by Verifik.co"
},
"id": "CC01A"
}If you send an unsupported document type, the API returns 409:
{
"code": "MissingParameter",
"message": "documentType must be one of: [CC,PPT]"
}Step 2: Registraduría validity certificate
The certificate endpoint requires the cédula issue date, something usually only the holder has at hand:
import os, requests
url = "https://api.verifik.co/v2/co/registraduria/certificado"
headers = {
"Accept": "application/json",
"Authorization": f"Bearer {os.getenv('VERIFIK_TOKEN')}"
}
params = {"documentNumber": "123456789", "date": "10/10/2020"}
r = requests.get(url, headers=headers, params=params)
print(r.status_code, r.json())Sample 200 response (PDF truncated):
{
"data": {
"codigoVerificacion": "ABC123XYZ",
"novedad": "VIGENTE",
"pdfBase64": "JVBERi0xLjQK...",
"documento": {
"cedula": "123456789",
"fechaExpedicion": "10/10/2020",
"lugarExpedicion": "BOGOTA D.C.",
"nombre": "JUAN CARLOS PEREZ GOMEZ"
}
},
"signature": {
"dateTime": "November 3, 2026 9:16 AM",
"message": "Certified by Verifik.co"
}
}Step 3: face match with liveness
Compare with liveness matches the selfie against the gallery and, if it clears compare_min_score, runs the liveness check:
import os, requests
url = "https://api.verifik.co/v2/face-recognition/compare-with-liveness"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.getenv('VERIFIK_TOKEN')}"
}
payload = {
"probe": "<base64>",
"gallery": ["<base64>"],
"search_mode": "FAST",
"liveness_min_score": 0.6,
"compare_min_score": 0.8
}
r = requests.post(url, json=payload, headers=headers)
print(r.json())Sample 200 response:
{
"id": "CWL01",
"data": {
"comparison": {
"score": 0.88
},
"liveness": {
"liveness_score": 0.91,
"min_score": 0.6,
"passed": true
}
},
"signature": {
"message": "Certified by Verifik.co",
"dateTime": "November 3, 2026 9:25 AM"
}
}More context in our guide to liveness to prevent identity fraud.
Step 4: National Police and Procuraduría records
The National Police lookup does not need a date:
curl -G "https://api.verifik.co/v2/co/policia/consultar" \
-H "Accept: application/json" \
-H "Authorization: Bearer $VERIFIK_TOKEN" \
--data-urlencode "documentType=CC" \
--data-urlencode "documentNumber=123456789"Sample 200 response:
{
"data": {
"arrayName": [
"JUAN",
"CARLOS",
"PEREZ",
"GOMEZ"
],
"documentNumber": "123456789",
"documentType": "CC",
"firstName": "JUAN CARLOS",
"lastName": "PEREZ GOMEZ",
"fullName": "JUAN CARLOS PEREZ GOMEZ",
"details": "NO TIENE ASUNTOS PENDIENTES CON LAS AUTORIDADES JUDICIALES"
},
"signature": {
"dateTime": "November 3, 2026 9:20 AM",
"message": "Certified by Verifik.co"
},
"id": "POL01"
}For the Procuraduría, check hasRecord before reading the sanctions:
import axios from "axios";
const { data } = await axios.get("https://api.verifik.co/v2/co/procuraduria/antecedentes", {
params: { documentType: "CC", documentNumber: "123456789" },
headers: {
Accept: "application/json",
Authorization: `Bearer ${process.env.VERIFIK_TOKEN}`,
},
});
console.log(data.data.hasRecord, data.data.legend);Response codes to handle
| Code | What it means | What to do |
|---|---|---|
| 200 | Successful lookup with data and signature | Store id and signature as evidence |
| 404 | No record found (for PEP, no match) | Check the number; for lists, treat it as “no result” |
| 409 | Missing or invalid parameter (MissingParameter, date format) or source unavailable (Endpoint_out_of_service) | Fix the parameter or retry later |
| 500 | Source or service error | Retry with backoff and send to review if it persists |

Beyond the person: vehicles and companies
If your product involves vehicles or business customers, the same token covers the complementary lookups: RUNT plate lookup, vehicle owner by plate, SOAT and technical inspection (RTM) and RUES company validation.
No code: smartCHECK
For one-off lookups without code, smartCHECK runs the same checks from the web. Each lookup, by API or web, is deducted from your plan credits, with plans from $49 a month. You can see the per-call cost of each endpoint in your dashboard once you create an account.
Common mistakes in Colombian KYC
- Validating only the cédula number. It confirms the document exists, not that the person presenting it is the holder. Add a face match with liveness.
- Mixing up issue date and date of birth. The Registraduría certificate, the CE and RNMC ask for the issue date in DD/MM/YYYY.
- Sending a CE to
/v2/co/cedula. That endpoint only accepts CC and PPT; the CE has its own endpoint. - Treating a 409 as a rejection. It may be a source that is out of service. Retry before deciding.
- Keeping more data than needed. Keep the verification evidence and set retention periods under Law 1581.
Quick answers
What do you need to run KYC in Colombia by API? At minimum, validate the cédula with /v2/co/cedula, confirm it is valid with the Registraduría certificate and run a face match with liveness. Depending on risk, add PEP and background checks.
What does the cédula lookup return? Full name, first names, last names, document number and type, plus a Verifik signature with the date and time of the lookup.
How do I know whether a cédula is valid? With /v2/co/registraduria/certificado, sending the number and the issue date. The novedad field shows the status, for example VIGENTE.
Which background records can I check by API? National Police, corrective measures (RNMC), Procuraduría, Contraloría and INPEC, plus the politically exposed persons list.
How do I verify a foreign resident in Colombia? With /v2/co/foreigner-id/ce for the foreigner ID card, or with /v2/co/cedula and documentType=PPT for the Temporary Protection Permit.
How much does it cost? Each lookup uses smartCHECK credits, with plans from $49 a month.
Build your KYC flow for Colombia
With these lookups you cover citizens, foreign residents, drivers and politically exposed persons, and every response carries a Verifik signature you can keep as evidence. Read the Colombia identity documentation and run your first tests.
Ready to get started? Create your free Verifik account or book a demo to see how to add KYC to your onboarding for Colombian customers.




