Documentación API

Integra consultas electorales, antecedentes y digitalización de documentos en tus aplicaciones.

La API de Avappi ofrece múltiples servicios para consultar información de ciudadanos colombianos de manera rápida y confiable. Ideal para campañas políticas, verificaciones de identidad, y digitalización de documentos.

Base URL: https://avappi.avapp.com.co/

Precios

Todos los precios están en Pesos Colombianos (COP). El saldo se descuenta automáticamente por cada consulta exitosa.

sell Tarifas por Servicio
Censo Electoral
$80
por consulta
Digitalización
$100
por registro

Nota: Clientes Enterprise pueden negociar tarifas personalizadas.

Autenticación

Todas las peticiones deben incluir tu API Key. Puedes obtener una registrándote en nuestro dashboard.

Métodos de envío

Método Parámetro Ejemplo
Header (Recomendado) X-API-Key X-API-Key: sk_live_123...
Query Param apiKey ?apiKey=sk_live_123...

Consulta Individual (Censo)

Obtén la información de votación de una sola cédula. Costo: $80 COP

GET /consultar/:cedula

Ejemplo de Solicitud

curl -X GET "https://avappi.avapp.com.co/consultar/1234567890" \
  -H "X-API-Key: tu_api_key"

Respuesta Exitosa

{
  "success": true,
  "data": {
    "departamento": "BOGOTA D.C.",
    "municipio": "BOGOTA D.C.",
    "puesto": "COLEGIO NUEVA GRANADA",
    "direccion": "CR 2 E # 70 - 20",
    "mesa": "1"
  },
  "duration": 1245,
  "fromCache": false
}

Consulta Masiva (Censo)

Consulta hasta 10 cédulas en una sola petición. Costo: $80 COP × cantidad de cédulas

POST /consultar/bulk

Body (JSON)

{
  "cedulas": ["1234567890", "9876543210"]
}

Ejemplo de Solicitud

curl -X POST "https://avappi.avapp.com.co/consultar/bulk" \
  -H "X-API-Key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{"cedulas": ["1234567890", "9876543210"]}'

Digitalización de Documentos

Extrae datos estructurados de documentos mediante OCR. Costo: $100 COP por registro

POST /api/digitization

Headers

Header Valor
Content-Type multipart/form-data
X-API-Key Tu API Key

Body (Form Data)

Campo Tipo Descripción
file File Imagen del documento (JPG, PNG, PDF)
type string Tipo de documento: cedula, e14, general

Ejemplo con cURL

curl -X POST "https://avappi.avapp.com.co/api/digitization" \
  -H "X-API-Key: tu_api_key" \
  -F "file=@documento.jpg" \
  -F "type=cedula"

Respuesta Exitosa

{
  "success": true,
  "records": 1,
  "data": [
    {
      "nombre": "JUAN PEREZ GARCIA",
      "cedula": "1234567890",
      "fecha_nacimiento": "1990-05-15",
      "confidence": 0.95
    }
  ],
  "cost": 100
}

Envíos WhatsApp

Envía mensajes de WhatsApp desde tus propios sistemas, por los números que ya tiene tu organización en Avappi. Sirve tanto para avisos sueltos (un recibo, una confirmación) como para lotes de hasta 100 mensajes en una sola petición.

Ojo: los envíos usan una clave distinta a la de consultas. Es una clave de organización, con el formato avp_..., y se crea desde el panel en Admin → API de envíos. Se muestra una sola vez al crearla: si se pierde, se revoca y se crea otra.

Autenticación

La clave va en un encabezado. Aquí no funciona el parámetro ?apiKey= de las consultas.

X-Api-Key: avp_tu_clave

# o, si tu cliente ya trabaja con Bearer:
Authorization: Bearer avp_tu_clave

Permisos de la clave

Cada clave lleva permisos y, si se quiere, una lista de números desde los que puede enviar.

Permiso Qué habilita
enviar Mandar mensajes (POST /api/envios/mensajes).
consultar Ver estado, historial, plantillas, cuentas y saldo.

Una clave sin el permiso que pide la ruta recibe 403.

Cobro

Se descuenta por mensaje aceptado por WhatsApp, según la regla acordada con tu organización (algunas cobran por mensaje enviado, otras por categoría de plantilla). Puedes ver el saldo y la regla vigente en GET /api/envios/saldo. Si no alcanza, la petición responde 402 y no se envía nada del lote.

Enviar mensajes

POST /api/envios/mensajes

Campos del mensaje

Campo Obligatorio Descripción
para Sí Número de destino. Un celular colombiano de 10 dígitos se completa solo con el 57.
plantilla Sí* Nombre de la plantilla en Meta. Debe estar aprobada en la cuenta que envía.
idioma No Idioma de la plantilla, p. ej. es. Sin él se toma la aprobada.
variables No Valores para los huecos de la plantilla, como {"1": "Ana", "2": "45.000"}.
texto Sí* Mensaje libre. Solo llega si el contacto te escribió en las últimas 24 horas; fuera de esa ventana WhatsApp exige plantilla.
desde / waAccountId No Número o cuenta con la que enviar. Si tu clave tiene una sola cuenta, se toma esa; si tiene varias, hay que indicarlo.

* Hace falta plantilla o texto, uno de los dos.

Un mensaje

curl -X POST "https://avappi.avapp.com.co/api/envios/mensajes" \
  -H "X-Api-Key: avp_tu_clave" \
  -H "Content-Type: application/json" \
  -d '{
    "para": "3001234567",
    "plantilla": "recordatorio_pago",
    "idioma": "es",
    "variables": { "1": "Ana", "2": "45.000" }
  }'

Varios de una vez

Hasta 100 mensajes por petición. El saldo se revisa una sola vez para todo el lote, así que no te quedas a mitad sin saber qué salió.

curl -X POST "https://avappi.avapp.com.co/api/envios/mensajes" \
  -H "X-Api-Key: avp_tu_clave" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: recibos-2026-08-14-lote-7" \
  -d '{
    "desde": "573001110000",
    "mensajes": [
      { "para": "3001234567", "plantilla": "recordatorio_pago", "variables": { "1": "Ana" } },
      { "para": "3007654321", "plantilla": "recordatorio_pago", "variables": { "1": "Luis" } }
    ]
  }'
Idempotency-Key: si mandas el mismo valor dos veces, la segunda petición devuelve la respuesta guardada con "repetida": true en vez de volver a enviar. Úsalo siempre que reintentes por un timeout, así un corte de red no le cuesta mensajes duplicados a nadie.

Respuesta

El resultado viene mensaje por mensaje: que la petición sea 200 no quiere decir que todos hayan salido.

{
  "ok": true,
  "enviados": 1,
  "fallidos": 1,
  "desde": "573001110000",
  "resultados": [
    { "ok": true,  "para": "573001234567", "wamid": "wamid.HBgMNTc..." },
    { "ok": false, "para": "573007654321", "error": "No existe la plantilla \"recordatorio_pago\" en esa cuenta" }
  ]
}

Cuando falla toda la petición

{
  "ok": false,
  "error": "Saldo insuficiente para enviar 2 mensajes",
  "saldo": 1200
}

Estado e historial

Un mensaje aceptado no es un mensaje entregado. WhatsApp avisa después si se entregó, si lo leyeron o si rebotó, y eso queda aquí.

GET /api/envios/mensajes/:wamid
curl -X GET "https://avappi.avapp.com.co/api/envios/mensajes/wamid.HBgMNTc..." \
  -H "X-Api-Key: avp_tu_clave"
{
  "ok": true,
  "mensaje": {
    "wamid": "wamid.HBgMNTc...",
    "telefono": "573001234567",
    "desde": "573001110000",
    "tipo": "template",
    "estado": "delivered",
    "origen": "api",
    "eventos": [
      { "estado": "sent",      "ocurrido_en": "2026-08-14T15:02:11.000Z" },
      { "estado": "delivered", "ocurrido_en": "2026-08-14T15:02:14.000Z" }
    ]
  }
}
GET /api/envios/mensajes

Los mensajes salientes de tu organización, para conciliar contra tus propios registros.

Parámetro Descripción
desde Fecha inicial, en formato ISO.
hasta Fecha final, en formato ISO.
telefono Filtra por un destinatario.
limite Cuántos traer. Por omisión 100, tope 500.
curl -X GET "https://avappi.avapp.com.co/api/envios/mensajes?desde=2026-08-01&limite=50" \
  -H "X-Api-Key: avp_tu_clave"

Códigos de Error

Código Descripción
400 Solicitud inválida. Verifica los parámetros enviados.
401 API Key inválida o faltante.
402 Saldo insuficiente. Recarga en el dashboard.
403 La clave no tiene el permiso que pide la ruta (envíos WhatsApp).
404 No se encontró el recurso, p. ej. un wamid que no es de tu organización.
429 Límite de velocidad excedido (60 req/min).
500 Error interno del servidor.
503 Servicio externo no disponible (Registraduría).