Illustration of vetting a cargo driver in Colombia: face match on a phone, ID card and a delivery truck

Colombia driver vetting API: check RUNT licence, SIMIT fines, suspensions and police record before dispatch

Table of Contents
Share this article

Short answer: To vet a driver in Colombia before dispatching a load, check six things by API: identity with face match and liveness, licence status and category in RUNT (/v2/co/runt/conductor), SIMIT fines and suspensions, SISCONMP training if they haul dangerous goods, the National Police record, and the vehicle’s SOAT and RTM.

If you run a carrier, a 3PL, a last-mile fleet or a delivery app, the question is not only “who is this person?”. It also matters whether their licence covers that vehicle, whether it has expired or been suspended, and whether the truck is allowed on the road. This guide builds that flow with Verifik’s APIs, step by step, with code samples, the fields to read and a decision table your operations team can use the same day.

Checklist: what to verify before dispatching a driver

These are the six checks, in the order that makes sense:

  1. Identity: the cédula exists and the person in front of you is its holder (a live selfie with liveness compared against the ID photo).
  2. RUNT licence: status ACTIVA, the right category for the vehicle, expiry date and any recorded suspension.
  3. SIMIT: outstanding fines by ID number and licence suspensions or cancellations.
  4. SISCONMP: valid training if the driver hauls dangerous goods.
  5. Police record: a National Police background check.
  6. Vehicle: valid SOAT insurance and technical inspection (RTM) for the plate on the trip.

None of these lookups replaces your security review or your judgement, but they turn a manual check across several government portals into calls to a single API, with signed responses you can keep as evidence.

If the use case is clear, create an account and test the endpoint from your own code.

Why now: peak season, fake carriers and licence changes

The last quarter puts pressure on operations. In its 15 October 2026 guide, the theft experts at Satrack explain that peak season multiplies trips, inventory on the move, urgent deliveries and exceptions. Their calendar flags dates such as Black Friday (27 November) and the long holiday weekends, and recommends reviewing the third parties and temporary vehicles that come in during order peaks.

Illustration of a loading dock with trucks and a driver check card showing passed checks before a cargo dispatch

The other risk needs no weapons. Fenix describes fake carriers (21 October 2026): someone poses as a real carrier, gets the job assigned and drives off with the goods with the paperwork in order. According to the IUMI and TAPA EMEA warnings it cites, these groups use front companies, identities of legitimate firms, stolen credentials and forged documents, and in Germany cases rose from 80 in 2022 to 266 in 2024. There are no public reports of this scheme in Colombia yet, but hiring trucks through digital freight platforms creates the same conditions. The weak point is before the vehicle leaves, when you decide who gets the load. That is where a quick driver and vehicle check makes a difference.

Delivery platforms also have a legal reason: article 26 of Law 2466 of 2025 requires them to set up a full identity recognition mechanism that individualises each digital delivery worker, while respecting habeas data.

Step 1: identity with the cédula and face match with liveness

Start by confirming that the person signing up is the holder of the document. POST /v2/face-recognition/compare-with-liveness compares a live selfie (probe) with the ID photo (gallery) and, if the match clears the threshold, runs liveness on the selfie. According to the documentation, compare_min_score accepts values from 0.67 to 0.95 and liveness_min_score defaults to 0.6.

curl -X POST "https://api.verifik.co/v2/face-recognition/compare-with-liveness" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VERIFIK_TOKEN" \
  -d '{
    "probe": "<selfie_base64>",
    "gallery": ["<id_photo_base64>"],
    "search_mode": "ACCURATE",
    "liveness_min_score": 0.6,
    "compare_min_score": 0.8
  }'

The response includes comparison.score and liveness.passed. To also validate the cédula against the Registraduría and screen lists, see our Colombia KYC API guide.

Step 2: RUNT licence (status, category, expiry and suspensions)

GET https://api.verifik.co/v2/co/runt/conductor queries RUNT with the driver’s document type and number. It accepts CC, CE, PA (passport) and PPT; for passports, primerApellido (first surname) is required. The documentation describes two billing modes since 1 September 2026:

  • Premium: you omit primerApellido and Verifik resolves the surname internally.
  • Basic: you send primerApellido and the name lookup is skipped. It is the same rate as the v3 route, where the surname is required.

Premium lookup (no surname):

curl -G "https://api.verifik.co/v2/co/runt/conductor" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $VERIFIK_TOKEN" \
  --data-urlencode "documentType=CC" \
  --data-urlencode "documentNumber=123456789"

Basic lookup (with surname, same URL):

curl -G "https://api.verifik.co/v2/co/runt/conductor" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $VERIFIK_TOKEN" \
  --data-urlencode "documentType=CC" \
  --data-urlencode "documentNumber=123456789" \
  --data-urlencode "primerApellido=GARCIA"

The same call in Python:

import os, requests

url = "https://api.verifik.co/v2/co/runt/conductor"
headers = {
    "Accept": "application/json",
    "Authorization": f"Bearer {os.getenv('VERIFIK_TOKEN')}",
}
params = {"documentType": "CC", "documentNumber": "123456789"}

r = requests.get(url, headers=headers, params=params, timeout=60)
print(r.json())

Sample 200 response from the documentation, trimmed to the fields you will use to decide:

{
  "data": {
    "citizenStatus": "ACTIVA",
    "documentNumber": "63535709",
    "documentType": "CC",
    "driverStatus": "ACTIVO",
    "infractions": {
      "nroPazYSalvo": "840377030067",
      "tieneMultas": "NO"
    },
    "licenses": [
      {
        "category": "B1",
        "dueDate": "19/09/2034",
        "endDateSuspension": null,
        "expeditionDate": "19/09/2024",
        "otExpide": "SECRETARIA DISTRITAL DE MOVILIDAD DE BOGOTA ",
        "restrictions": null,
        "startDateSuspension": null,
        "status": "ACTIVA"
      }
    ],
    "medicalCertificates": [],
    "totalLicenses": "1"
  },
  "signature": {
    "dateTime": "October 10, 2025 7:29 PM",
    "message": "Certified by Verifik.co"
  },
  "id": "3R2V0"
}

What to read in each response:

  • driverStatus and citizenStatus: the driver’s and the document’s status in RUNT.
  • licenses[]: one entry per licence, with category, status (for example ACTIVA), dueDate, restrictions, otExpide (issuing transit office) and the startDateSuspension / endDateSuspension dates.
  • infractions.tieneMultas: an early flag for fines, which you then expand in SIMIT.
  • medicalCertificates and aptitudeCertificates: certificates linked to the driver.

The most common operational mistake is approving an ACTIVA licence in a category that does not match the vehicle. A driver can hold several categories, so compare each one with the categories your policy requires for that vehicle type. This function does the basic check:

// Turns "19/09/2034" (RUNT format) into a date
const parseRunt = (s) => {
  const [d, m, y] = s.split("/").map(Number);
  return new Date(y, m - 1, d);
};

// requiredCategories: the categories YOUR policy requires for that vehicle
function isFitToDrive(runtData, requiredCategories, today = new Date()) {
  if (runtData.driverStatus !== "ACTIVO") return false;
  return runtData.licenses.some((lic) =>
    requiredCategories.includes(lic.category) &&
    lic.status === "ACTIVA" &&
    parseRunt(lic.dueDate) > today &&
    !lic.startDateSuspension // no suspension recorded on that licence
  );
}

If the document is mistyped or a parameter is missing, the API returns 409; if RUNT has no record, 404 NotFound:

{
  "code": "MissingParameter",
  "message": "documentType must be one of: [CC, CE, PPT, PA, NIT]"
}

For the endpoint on its own, read our guide to driver’s licence verification in Colombia.

Step 3: SIMIT fines and suspensions by ID number

SIMIT adds two signals that RUNT does not always show in full. GET /v2/co/simit/consultar returns a person’s multas[] (amount, plate, infractions and estadoComparendo), cursos and acuerdosPago, with amounts in Colombian pesos (documentation). GET /v2/co/simit/suspensiones focuses on licence suspensions or cancellations (documentation):

curl -G "https://api.verifik.co/v2/co/simit/suspensiones" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $VERIFIK_TOKEN" \
  --data-urlencode "documentType=CC" \
  --data-urlencode "documentNumber=123456789"

Sample response from the documentation (trimmed):

{
  "data": {
    "documentType": "CC",
    "documentNumber": "123456789",
    "suspensiones": [
      {
        "numeroResolucion": "RES-2024-000123",
        "fechaSuspension": "2024/03/15",
        "estado": "VIGENTE"
      }
    ]
  },
  "signature": {
    "message": "Certified by Verifik.co",
    "dateTime": "April 8, 2026 11:00 PM"
  }
}

Field names come from SIMIT and may differ from the sample, so parse the list defensively. An empty suspensiones list can mean no suspensions were found for that identity.

Step 4: SISCONMP training for dangerous goods

If the driver hauls dangerous goods, check their training in SISCONMP, the system that tracks personnel who transport hazardous materials. GET /v2/co/sisconmp/trainings takes documentType (CC, CE or PA) and documentNumber:

curl -G "https://api.verifik.co/v2/co/sisconmp/trainings" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $VERIFIK_TOKEN" \
  --data-urlencode "documentType=CC" \
  --data-urlencode "documentNumber=123456789"

According to the documentation, the response includes the course (nameTraining, for example “CURSO BASICO”), the training centre, the course expirationDate, expirationDateLicense and inactive (“No” means the record is active). Block dangerous-goods dispatch if the course has expired. More detail in our SISCONMP verification guide.

Step 5: National Police record check

GET /v2/co/policia/consultar (POST also works) checks whether the person has pending matters with the judicial authorities and returns the official wording in data.details. It accepts CC, CE, PPT, PA and DP (documentation).

Two practical details: when the Police portal cannot generate the certificate online, the API still returns 200 with the in-person-service wording, and temporary source failures come back as 409 Endpoint_out_of_service. Treat both as “pending review”, not as approved. We cover this in our police record check API guide.

Step 6: the vehicle, valid SOAT and RTM

The driver can be fine while the truck is not. GET /v2/co/runt/vehiculo takes the plate and the owner’s document and returns soat and techReview objects, each with valid and dueDate (documentation). We cover it in depth in our SOAT and RTM verification API guide.

If the vehicle belongs to a third party and you don’t have the owner’s document, the RUNT plate lookup starts from the plate alone and includes the SOAT and technical inspection blocks when they exist.

How to combine the steps at onboarding and before each dispatch

Not every check repeats at the same pace. Identity and biometrics are validated at onboarding (and again if the phone or account changes). The licence, SIMIT, police record and vehicle change over time, so re-run them on a schedule, for example monthly, and before each trip when the load is high value.

The 6 pre-dispatch driver vetting steps: identity, RUNT licence, SIMIT, SISCONMP, police record and SOAT/RTM

This JavaScript example runs biometrics at onboarding and fires the four dispatch checks in parallel. It reuses the isFitToDrive function from step 2:

import axios from "axios";

const api = axios.create({
  baseURL: "https://api.verifik.co",
  headers: { Authorization: `Bearer ${process.env.VERIFIK_TOKEN}` },
  timeout: 60000,
});
const doc = { documentType: "CC", documentNumber: driver.cedula };

// Onboarding: identity + biometrics (once, and again if the phone or account changes)
const { data: face } = await api.post("/v2/face-recognition/compare-with-liveness", {
  probe: selfieBase64,
  gallery: [idPhotoBase64],
  search_mode: "ACCURATE",
});

// Before each dispatch (or monthly): licence, SIMIT, police record and vehicle in parallel
const [runt, susp, police, vehicle] = await Promise.all([
  api.get("/v2/co/runt/conductor", { params: doc }),
  api.get("/v2/co/simit/suspensiones", { params: doc }),
  api.get("/v2/co/policia/consultar", { params: doc }),
  api.get("/v2/co/runt/vehiculo", {
    params: { documentType: "CC", documentNumber: owner.cedula, plate: trip.plate },
  }),
]);

const fit =
  isFitToDrive(runt.data.data, trip.requiredCategories) &&
  vehicle.data.data.soat.valid &&
  vehicle.data.data.techReview.valid;

// Store every response with its id and signature as dispatch evidence

Store the id and signature (“Certified by Verifik.co”) of each response with the transport order. If something goes wrong, you will have evidence of what you checked, when and with what result.

Decision table: from result to action

ResultSuggested action
Biometrics passed, ACTIVA licence in the required category and a future dueDateApprove and continue with SIMIT, police record and vehicle
Licence expired, suspended or with a startDateSuspension recordedBlock the dispatch
Active licence but a different categoryReassign to a compatible vehicle or block
SIMIT suspension, or outstanding fines above your policy limitManual review before assigning
SISCONMP course expired or inactive (dangerous goods)Block for dangerous goods
Police: pending matters, in-person-service wording or 409Manual review; never auto-approve
SOAT or RTM with valid set to falseThe vehicle stays until renewed
404 NotFound in RUNTAsk for the original document and retry

What’s next: mandatory theory exam and a points-based licence

The licence regime is changing, which strengthens the case for checking the source instead of trusting a copy of the document:

  • Theory exam: under External Circular 20261010000277 from the Vice Ministry of Transport, since Monday 14 September 2026 first licences and recategorisations require passing the theory exam nationwide.
  • Points-based licence: on 2 November 2026 the Ministry of Transport presented a proposal under which each driver would have a points balance that drops with each offence, and could lose the licence once it runs out. It is a proposal within the reform of the National Traffic Code and is not in force yet.

How to choose a driver vetting provider

Colombia has local vehicle-data APIs and international identity platforms. Before choosing, compare these criteria:

CriterionWhat to askVerifik
Official sourceDoes it query RUNT, SIMIT and the Police, or only read the document image?Queries the official sources
Category and suspensionsDoes it return each category with status, expiry and suspension dates?Yes, in licenses[]
Dangerous goodsDoes it include SISCONMP?Yes, /v2/co/sisconmp/trainings
BiometricsDoes it bind the person to the document with face match and liveness?Yes, compare-with-liveness
EvidenceIs every response signed and given an id?Yes, signature and id
CoverageDoes it work for other countries in the region?Several LATAM countries on the same account

If you run logistics operations, also see our logistics solutions page.

Pricing and how to start

Lookups are paid with credits. smartCHECK plans run from $49 a month (Starter) to $129 (Basic), $299 (Plus) and $649 (Business); on the annual plan, Starter costs $490 and gives $588 in credits. You see each endpoint’s cost in your dashboard, and on /v2/co/runt/conductor the rate depends on whether you send the first surname (Basic) or not (Premium). If your team doesn’t code, smartCHECK lets you pick the service, see results in a no-code view and run bulk lookups from a CSV.

You can create your account and test the flow with your own drivers, or read the RUNT driver documentation to start integrating.

Miguel Treviño - Co-founder and CTO, Verifik

Frequently Asked Questions (FAQs)

➖

What should I check before assigning a load to a driver?

Six checks: identity with face match and liveness, the RUNT licence (status, category, expiry and suspensions), SIMIT fines and suspensions, SISCONMP training if they haul dangerous goods, the National Police record and the vehicle's valid SOAT and RTM. With Verifik, all of them run by API with the cédula and the plate.

➕

How do I know if a driver's licence covers a truck?

Call /v2/co/runt/conductor and read the licenses[] array: each licence has its category, status, dueDate and suspension dates. Compare each category with the ones your policy requires for that vehicle type and approve only if one is ACTIVA, not suspended and not expired.

➕

How do I check whether a driver's licence is suspended?

RUNT conductor returns startDateSuspension and endDateSuspension per licence, and /v2/co/simit/suspensiones checks SIMIT for suspensions or cancellations linked to the ID number. Use both signals and block the dispatch if either shows an active suspension.

➕

How often should I re-check my drivers?

Identity and biometrics are validated at onboarding and again if the phone or account changes. The licence, SIMIT, police record and SOAT or RTM change over time, so re-run them on a schedule, for example monthly, and before each trip with a high-value load.

➕

What is SISCONMP and when do I need it?

It is the system that tracks personnel who transport dangerous goods in Colombia. If your driver hauls this kind of cargo, call /v2/co/sisconmp/trainings to see their course, training centre, expiry date and whether the record is active.

➕

Is there a points-based driving licence in Colombia yet?

No. On 2 November 2026 the Ministry of Transport presented the points-based licence as a proposal within the reform of the National Traffic Code. What is in force since 14 September 2026 is the mandatory theory exam for first licences and recategorisations.

➕

Can I vet drivers without writing code?

Yes. With smartCHECK you pick the service, enter the document and see the result in a no-code view, or upload a CSV for bulk lookups. When you want to automate it inside your platform, you use the same services by API.

Explore more articles