Intro Auth Base URL POST /users POST /tramites Documents GET /tramites Payment Webhooks Errors Flow Contact

Introduction

CertiVeh Partner API · Integra CertiVeh en tu aplicacion para que tus usuarios obtengan su certificado UPME sin salir de tu plataforma.

Esta API REST permite crear usuarios, iniciar tramites de certificacion UPME, subir documentos, procesar pagos y consultar el estado de cada tramite de forma programatica.

Authentication

Todas las solicitudes requieren el header X-API-Key con tu clave de partner.

Header
X-API-Key: pk_live_xxxxxxxxxxxxx
i Contacta contacto@certiveh.co para solicitar tu API key.

Base URL

Production
https://ykolfdgnlaxahtbuurgj.supabase.co/functions/v1/partner-api

POST /users

Registers a new user associated with your partner account.

Request Body · Persona Natural

FieldTypeDescription
emailrequiredstringEmail del usuario
phoneoptionalstringTelefono formato E.164 (ej: +573001234567)
person_typerequiredstring"natural" o "juridica"
first_namesrequiredstringNombres
last_namesrequiredstringApellidos
cedula_numberrequiredstringNumero de cedula (solo digitos)
date_of_birthoptionalstringFecha nacimiento AAAA-MM-DD
expedition_dateoptionalstringFecha expedicion cedula AAAA-MM-DD
ciiu_codeoptionalstringCodigo CIIU 4 digitos
departmentrequiredstringDepartamento (ej: "ANTIOQUIA")
municipalityrequiredstringMunicipio (ej: "MEDELLIN")
addressrequiredstringDireccion de residencia

Additional Fields · Persona Juridica

FieldTypeDescription
company_namerequiredstringRazon social
nitrequiredstringNIT sin digito verificacion (9 digitos)
nit_dvoptionalstringDigito de verificacion (1 digito)
legal_rep_namerequiredstringNombre representante legal
legal_rep_idrequiredstringCedula representante legal
company_addressoptionalstringDireccion empresa

Response 201

JSON
{
  "user_id": "uuid-del-usuario",
  "status": "created"
}

POST /tramites

Creates UPME certification tramite with vehicle data. Returns amount to pay.

Request Body

FieldTypeDescription
user_idrequiredstringUUID del usuario (from /users)
platerequiredstringPlaca (6 chars, ej: "ABC123")
vinrequiredstringVIN (17 chars)
brandrequiredstringMarca (ej: "KIA")
linerequiredstringLinea/modelo (ej: "NIRO DESIRE")
yearrequirednumberAno del modelo
engine_numberoptionalstringNumero motor (N/A para electricos puros)
displacement_kwoptionalstringPotencia en kW
propulsion_typerequiredstring"Electrico" o "Hibrido"
owner_namerequiredstringNombre propietario registrado
owner_idrequiredstringCedula/NIT propietario
purchase_value_coprequirednumberValor bruto vehiculo COP (sin IVA)
purchase_daterequiredstringFecha compra AAAA-MM-DD
dealer_namerequiredstringNombre concesionario
invoice_numberrequiredstringNumero factura
buyer_namerequiredstringNombre comprador en factura

Response 201

JSON
{
  "case_id": "uuid-del-tramite",
  "amount_cop": 1131566,
  "amount_cents": 113156600,
  "breakdown": {
    "costo_upme": 350906,
    "honorarios": 599990,
    "iva": 180670,
    "discount": 0,
    "total": 1131566
  }
}

POST /tramites/{'{'+'case_id}'}/documents

Uploads required documents. Each document is processed automatically with AI.

! Content-Type debe ser multipart/form-data. Archivos soportados: JPG, PNG o PDF, max 10 MB.

Form Fields

FieldTypeDescription
typerequiredstringDocument type (see table below)
filerequiredfileFile (JPG, PNG or PDF, max 10MB)

Document Types

Type valueDescription
cedula-frenteCedula ciudadania (frente)
cedula-reversoCedula ciudadania (reverso)
rutRUT (persona natural)
tarjeta-propiedad-frenteTarjeta propiedad vehiculo (frente)
tarjeta-propiedad-reversoTarjeta propiedad vehiculo (reverso)
facturaFactura compra vehiculo

Response 200

JSON
{
  "case_id": "uuid",
  "type": "factura",
  "ocr_status": "pending"
}

GET /tramites/{'{'+'case_id}'}

Returns the current status and details of a tramite.

Response 200

JSON
{
  "case_id": "uuid",
  "status": "IN_PROGRESS",
  "step": 5,
  "progress_pct": 44,
  "paid_at": "2026-05-20T...",
  "created_at": "2026-05-15T...",
  "updated_at": "2026-05-20T...",
  "vehicle": {
    "brand": "KIA",
    "line": "NIRO DESIRE",
    "year": 2025,
    "plate": "QMX060",
    "vin": "KNACP81EGT5328961",
    "propulsion_type": "Hibrido",
    "purchase_value_cop": 116805309
  },
  "documents": [
    { "type": "factura", "ocr_status": "done" },
    { "type": "tarjeta-propiedad-frente", "ocr_status": "done" }
  ],
  "payment": {
    "status": "APPROVED",
    "amount_cents": 113156600,
    "reference": "CERTIVEH-xxx-xxx"
  }
}

Tramite Statuses

StatusDescription
DRAFTTramite creado, pendiente de pago
DOCUMENT_REVIEWPago recibido, documentos en revision
IN_PROGRESSEn tramite ante la UPME
FILEDSolicitud de certificado enviada a UPME
APPROVEDUPME aprobo la solicitud
ACTION_REQUIREDSe necesita una accion del usuario
COMPLETEDCertificado emitido
REJECTEDSolicitud rechazada por la UPME

POST /tramites/{'{'+'case_id}'}/payment

Initializes a payment session and returns Wompi integration data.

Response 200

JSON
{
  "reference": "CERTIVEH-xxx-xxx",
  "amount_cents": 113156600,
  "amount_cop": 1131566,
  "currency": "COP",
  "public_key": "pub_prod_xxx",
  "signature": "sha256-hash",
  "redirect_url": "https://portal.certiveh.co/tramite/confirmacion?ref=xxx"
}

Wompi Widget Integration

Use the response values to render the Wompi checkout button:

HTML
<script src="https://checkout.wompi.co/widget.js"
  data-render="button"
  data-public-key="{'{'+'public_key}'}"
  data-currency="{'{'+'currency}'}"
  data-amount-in-cents="{'{'+'amount_cents}'}"
  data-reference="{'{'+'reference}'}"
  data-redirect-url="{'{'+'redirect_url}'}"
  data-signature:integrity="{'{'+'signature}'}">
</script>

Webhooks

CertiVeh sends notifications to your webhook URL when a tramite status changes. Provide your webhook URL when requesting your API key.

Payload

JSON · POST to your webhook URL
{
  "event": "tramite.status_changed",
  "case_id": "uuid",
  "status": "DOCUMENT_REVIEW",
  "timestamp": "2026-05-20T15:30:00Z"
}

Errors

All error responses follow a consistent format:

Error Response
{
  "error": "Description"
}

HTTP Status Codes


Integration Flow

Typical end-to-end integration in 6 steps:

  1. Create user POST /users · Register the end-user with personal data.
  2. Create tramite with vehicle data POST /tramites · Submit vehicle details, receive pricing breakdown.
  3. Upload documents POST /tramites/:id/documents · Upload cedula, tarjeta de propiedad, and factura.
  4. Initialize payment POST /tramites/:id/payment · Get Wompi widget parameters and render checkout.
  5. Poll status GET /tramites/:id · Check tramite progress periodically.
  6. Receive webhooks Your endpoint receives status updates automatically as the tramite progresses.

Contact

Para solicitar tu API key o soporte tecnico, escribe a:

Email
contacto@certiveh.co