Saltar al contenido

API de EWL

Conecte su tienda con nuestra logística

Cree guías automáticamente cuando entre un pedido, consulte el estado de cada envío y reciba avisos en su sistema. Todo con una sola credencial.

Empezar

Tres pasos. El primero puede hacerlo ahora mismo sin registrarse: los catálogos son públicos.

Tu primera petición
curl https://demoapi.ewl-cr.com/provincia
  1. Obtenga su clave. Entre al Portal de Clientes y abra la sección API. Ahí ve su clave y puede regenerarla cuando quiera.
  2. Integre contra el entorno de desarrollo. Tiene su propia base de datos, así que puede equivocarse sin crear envíos reales.
  3. Cambie el dominio a producción cuando todo funcione. No hay nada más que cambiar.

Autenticación

Una sola cosa que recordar: la clave va en la cabecera Authorization, con el prefijo Bearer.

curl
curl https://demoapi.ewl-cr.com/v2/paqueteria/tracking/ANA5922554BD \
  -H "Authorization: Bearer ewl_live_tu_clave_aqui"
JavaScript (Node)
const res = await fetch(
  "https://demoapi.ewl-cr.com/v2/paqueteria/tracking/ANA5922554BD",
  { headers: { Authorization: `Bearer ${process.env.EWL_API_KEY}` } }
);
const { response } = await res.json();
console.log(response.status, response.data);
PHP
$ch = curl_init("https://demoapi.ewl-cr.com/v2/paqueteria/tracking/ANA5922554BD");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . getenv("EWL_API_KEY"),
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$respuesta = json_decode(curl_exec($ch), true);

Nunca ponga la clave en el navegador

Quien la tenga puede crear envíos a su nombre. Guárdela como variable de entorno en su servidor y haga las llamadas desde ahí, nunca desde el JavaScript de su sitio. Si cree que se filtró, regenérela desde el Portal de Clientes: la anterior deja de funcionar al instante.

Entornos

Mismo código, distinto dominio. El de desarrollo tiene su propia base de datos: nada de lo que haga ahí toca sus envíos reales.

Entorno Dominio Datos
Desarrollo demoapi.ewl-cr.com Base separada, sin efectos reales
Producción api.ewl-cr.com Envíos reales

Probar en vivo

Esta consola hace peticiones reales al entorno de desarrollo desde su navegador. Los catálogos no piden credencial: elija uno y pulse enviar.

En vivo · entorno de desarrollo demoapi.ewl-cr.com

Crear una guía

El caso más común: su tienda recibe un pedido y crea el envío.

POST /v2/paqueteria/crearPaquete
curl -X POST https://demoapi.ewl-cr.com/v2/paqueteria/crearPaquete \
  -H "Authorization: Bearer ewl_live_tu_clave_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "destinatario":      "Ana Rojas",
    "telefono_cliente":  "+50688887777",
    "correo_web":        "[email protected]",
    "direccion_entrega": "200 m sur de la iglesia",
    "distrito_entrega":  37,
    "direccion_origen":  "Bodega central",
    "distrito_origen":   1,
    "envia":             "Mi Tienda",
    "peso":              2.4,
    "send_email":        1
  }'

El distrito va por código, no por nombre. Lo obtiene de los catálogos. Si su tienda guarda el código postal, le sirve directo: en Costa Rica son cinco dígitos con el formato PCCDD — provincia, cantón y distrito.

Rastrear un envío

Devuelve el recorrido completo, con fecha y hora de cada etapa.

GET /v2/paqueteria/tracking/{codigo}
curl https://demoapi.ewl-cr.com/v2/paqueteria/tracking/ANA5922554BD \
  -H "Authorization: Bearer ewl_live_tu_clave_aqui"

Cada envío atraviesa estas ocho etapas, siempre en este orden:

1 POR RECOLECTAR 2 RECOLECTADO 3 EN TRANSITO A BODEGA 4 EN BODEGA 5 EN TRANSITO A SEDE 6 RECIBIDO EN SEDE 7 EN RUTA DE ENTREGA 8 ENTREGADO

Catálogos

Provincias, cantones y distritos de Costa Rica. No requieren credencial, así que puede cargarlos al construir su formulario de checkout.

Encadenar los tres niveles
# 1. Provincias
curl https://demoapi.ewl-cr.com/provincia

# 2. Cantones de San José (cod_provincia = 1)
curl https://demoapi.ewl-cr.com/canton/1

# 3. Distritos de un cantón
curl https://demoapi.ewl-cr.com/distrito/1

Referencia completa

Paquetería

POST /v2/paqueteria/crearPaquete Crea una guía
GET /v2/paqueteria/tracking/{codigo} Recorrido de un envío
GET /v2/paqueteria/no_entregados Envíos pendientes de entrega
GET /paquetes/{estado} Envíos filtrados por estado

Cotización

GET /calcular/{origen}/{destino}/{peso} Costo de un envío
GET /precios Tarifas vigentes público

Catálogos

GET /provincia Las 7 provincias público
GET /canton/{provincia} Cantones de una provincia público
GET /distrito/{canton} Distritos de un cantón público
GET /distritos/all Todos los distritos público
GET /sedes/all Sedes de EWL público

Bodega

GET /v2/bodegaje/articulos Artículos almacenados
GET /v2/bodegaje/inventario Existencias

Webhooks

Si vende con Shopify o WooCommerce, no hace falta que programe nada: configura un webhook y nosotros creamos la guía cuando entra el pedido.

Shopify

  1. En Shopify: Settings → Notifications → Webhooks.
  2. Evento Order creation, formato JSON.
  3. URL: https://api.ewl-cr.com/webhooks/shopify
  4. Copie el signing secret que muestra Shopify y envíenoslo junto al dominio de su tienda para darle de alta.

WooCommerce

  1. En WooCommerce: Ajustes → Avanzado → Webhooks.
  2. Tema Pedido creado, versión WP REST API v3.
  3. URL de entrega: https://api.ewl-cr.com/webhooks/woocommerce
  4. Defina un secreto y compártanoslo junto a la dirección de su tienda.

Qué esperar

Verificamos la firma de cada aviso con su secreto, así que nadie puede crear envíos falsos a su nombre. Si su plataforma reintenta el mismo pedido, no se duplica: devolvemos la guía que ya habíamos creado.

Respuesta Significa
200 creado Guía creada. Viene su código.
200 duplicado_ignorado Ese pedido ya se había procesado.
401 firma_invalida El secreto no coincide. Revisalo.
422 direccion_no_resuelta No pudimos determinar el distrito de entrega.
500 Fallo temporal. Tu plataforma reintentará sola.

Estados y errores

Todas las respuestas traen un campo status legible junto al código HTTP. Con mirar ese campo alcanza para saber qué pasó.

Forma de la respuesta
{
  "response": {
    "code": 103,
    "data": [ … ],
    "status": "ok"
  }
}
ok 200 La petición funcionó y hay datos.
sin_resultados 200 Funcionó, pero no hay nada que devolver.
no_autorizado 401 · 403 Falta la clave, es incorrecta o no tiene permiso.
no_encontrado 404 La ruta o el recurso no existe.
datos_invalidos 422 Falta un campo o su valor no es válido.
demasiadas_peticiones 429 Superaste el límite. Esperá y reintentá.
error_servidor 5xx Fallo de nuestro lado. Podés reintentar.

El campo code numérico identifica al endpoint y se conserva por compatibilidad. Para saber cómo fue la petición, use status.

¿Se le atascó algo?

Escríbanos a [email protected] contando qué está integrando y qué endpoint le está dando problemas.