DavyCorp APIs

Consulta de placas

Datos vehiculares de Ecuador: SRI (vehículo y rubros) y ANT (matrícula y citaciones). GET y POST equivalen.

BASE URL https://apis.davycorp.ec/v2
Demo. Solo verifyApiUser. El cupo es el de usage_limit / usage_count del API user. GET también cuenta: es una consulta, no un estado de trabajo. La respuesta tiene la forma { ok, datos }.
GET POST /placas/demo DEMO

Autenticación

AuthorizationBearer TU_API_KEYrequerido
Parámetros
CampoDóndeObligatorioDescripción
placaquery, JSON o formSí3 a 10 letras o números. Se ignoran espacios y guiones.

Un campo modalidad en el cuerpo no cambia de entorno: lo define la ruta. GET y POST dan la misma respuesta.

Ejemplos de consumo
cURL
fetch
Python
GET
curl -X POST "https://apis.davycorp.ec/v2/placas/demo" \
  -H "Authorization: Bearer TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"placa": "ABC1234"}'
const response = await fetch(
  "https://apis.davycorp.ec/v2/placas/demo",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer TU_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ placa: "ABC1234" })
  }
);

const data = await response.json();
console.log(response.status, data);
import requests

response = requests.post(
    "https://apis.davycorp.ec/v2/placas/demo",
    headers={
        "Authorization": "Bearer TU_API_KEY",
    },
    json={"placa": "ABC1234"},
    timeout=30,
)

print(response.status_code)
print(response.json())
curl "https://apis.davycorp.ec/v2/placas/demo?placa=ABC1234" \
  -H "Authorization: Bearer TU_API_KEY"
Respuestas
200
400
401 · 403
404
429
500 · 502
// 200 — SRI y/o ANT respondieron con datos (valores ilustrativos)
{
  "ok": true,
  "datos": {
    "placa": "ABC1234",
    "sri": { "vehiculo": {}, "tiene_pendientes": false, "total_pendiente": 0, "rubros": [] },
    "sri_error": null,
    "ant": { "vehiculo": {}, "citaciones": {}, "citaciones_pendientes": [] },
    "ant_error": null
  }
}
// 400 — placa vacía o inválida
{ "ok": false, "error": "La placa es obligatoria." }
// 401 — sin header Authorization
{ "error": "API Key requerida" }

// 403 — API key inválida
{ "success": false, "error": "Api user inválido" }
// 404 — la placa no está registrada en SRI ni en ANT
{ "ok": false, "error": "MENSAJE_DEL_SERVIDOR" }
// 429 — el API user llegó a su límite de consultas
{ "error": "Límite de consultas alcanzado", "status": false }
// 500 — fallo interno de la consulta
{ "ok": false, "error": "MENSAJE_DEL_SERVIDOR" }

// 502 — SRI y ANT fallaron sin confirmar que la placa no existe
{ "ok": false, "error": "MENSAJE_DEL_SERVIDOR" }

La consulta es síncrona: responde 200 con los datos, sin trabajos que consultar después. Un método distinto de GET o POST responde 405.

Comercial. Igual que demo a nivel de middleware: solo verifyApiUser. No valida apiwhatsapp.
GET POST /placas/comercial COMERCIAL

Autenticación

AuthorizationBearer TU_API_KEYrequerido
Parámetros
CampoDóndeObligatorioDescripción
placaquery, JSON o formSí3 a 10 letras o números. Se ignoran espacios y guiones.

Un campo modalidad en el cuerpo no cambia de entorno: lo define la ruta. GET y POST dan la misma respuesta.

Ejemplos de consumo
cURL
fetch
Python
GET
curl -X POST "https://apis.davycorp.ec/v2/placas/comercial" \
  -H "Authorization: Bearer TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"placa": "ABC1234"}'
const response = await fetch(
  "https://apis.davycorp.ec/v2/placas/comercial",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer TU_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ placa: "ABC1234" })
  }
);

const data = await response.json();
console.log(response.status, data);
import requests

response = requests.post(
    "https://apis.davycorp.ec/v2/placas/comercial",
    headers={
        "Authorization": "Bearer TU_API_KEY",
    },
    json={"placa": "ABC1234"},
    timeout=30,
)

print(response.status_code)
print(response.json())
curl "https://apis.davycorp.ec/v2/placas/comercial?placa=ABC1234" \
  -H "Authorization: Bearer TU_API_KEY"
Respuestas
200
400
401 · 403
404
429
500 · 502
// 200 — SRI y/o ANT respondieron con datos (valores ilustrativos)
{
  "ok": true,
  "datos": {
    "placa": "ABC1234",
    "sri": { "vehiculo": {}, "tiene_pendientes": false, "total_pendiente": 0, "rubros": [] },
    "sri_error": null,
    "ant": { "vehiculo": {}, "citaciones": {}, "citaciones_pendientes": [] },
    "ant_error": null
  }
}
// 400 — placa vacía o inválida
{ "ok": false, "error": "La placa es obligatoria." }
// 401 — sin header Authorization
{ "error": "API Key requerida" }

// 403 — API key inválida
{ "success": false, "error": "Api user inválido" }
// 404 — la placa no está registrada en SRI ni en ANT
{ "ok": false, "error": "MENSAJE_DEL_SERVIDOR" }
// 429 — el API user llegó a su límite de consultas
{ "error": "Límite de consultas alcanzado", "status": false }
// 500 — fallo interno de la consulta
{ "ok": false, "error": "MENSAJE_DEL_SERVIDOR" }

// 502 — SRI y ANT fallaron sin confirmar que la placa no existe
{ "ok": false, "error": "MENSAJE_DEL_SERVIDOR" }

La consulta es síncrona: responde 200 con los datos, sin trabajos que consultar después. Un método distinto de GET o POST responde 405.

Compatibilidad. El JSON de éxito y error de consulta es el del proyecto original consulta-placas-ec-node (/api/placa). Aquí vive bajo /v2/placas* con la autenticación de DavyCorp. Las credenciales SRI (SRI_RUC, SRI_CLAVE) son del servidor, no del cliente.
Modalidades
ModalidadRutaMiddlewares
DemoGET/POST /v2/placas/demoverifyApiUser
ComercialGET/POST /v2/placas/comercialverifyApiUser

200 si SRI o ANT devuelven datos. 404 solo si ambas confirman que la placa no está registrada. 502 si ambas fallan por red u otro error.

Códigos que devuelve el servidor
HTTPCuándoCuerpo
200SRI y/o ANT respondieron con datos{ ok: true, datos }
400Placa vacía o inválida{"ok":false,"error":"La placa es obligatoria."}
401Sin header Authorization{"error":"API Key requerida"}
403API key inválidasuccess: false, error
404Placa no registrada en SRI ni ANTok: false, error
405Método distinto de GET/POST{"ok":false,"error":"Metodo no permitido"}
429El API user llegó a usage_limit{"error":"Límite de consultas alcanzado","status":false}
500Fallo interno de la consultaok: false
502SRI y ANT fallaron sin confirmar ausenciaok: false