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.
curl https://demoapi.ewl-cr.com/provincia - Obtenga su clave. Entre al Portal de Clientes y abra la sección API. Ahí ve su clave y puede regenerarla cuando quiera.
- Integre contra el entorno de desarrollo. Tiene su propia base de datos, así que puede equivocarse sin crear envíos reales.
- 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 https://demoapi.ewl-cr.com/v2/paqueteria/tracking/ANA5922554BD \
-H "Authorization: Bearer ewl_live_tu_clave_aqui" 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); $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.
Se usa solo en su navegador para esta petición. No se envía a ningún otro sitio ni se guarda. La obtiene en el Portal de Clientes → API.
Crear una guía
El caso más común: su tienda recibe un pedido y crea el envío.
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.
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:
Catálogos
Provincias, cantones y distritos de Costa Rica. No requieren credencial, así que puede cargarlos al construir su formulario de checkout.
# 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
/v2/paqueteria/crearPaquete Crea una guía /v2/paqueteria/tracking/{codigo} Recorrido de un envío /v2/paqueteria/no_entregados Envíos pendientes de entrega /paquetes/{estado} Envíos filtrados por estado Cotización
/calcular/{origen}/{destino}/{peso} Costo de un envío /precios Tarifas vigentes
público
Catálogos
/provincia Las 7 provincias
público
/canton/{provincia} Cantones de una provincia
público
/distrito/{canton} Distritos de un cantón
público
/distritos/all Todos los distritos
público
/sedes/all Sedes de EWL
público
Bodega
/v2/bodegaje/articulos Artículos almacenados /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
- En Shopify: Settings → Notifications → Webhooks.
- Evento Order creation, formato JSON.
-
URL:
https://api.ewl-cr.com/webhooks/shopify - Copie el signing secret que muestra Shopify y envíenoslo junto al dominio de su tienda para darle de alta.
WooCommerce
- En WooCommerce: Ajustes → Avanzado → Webhooks.
- Tema Pedido creado, versión WP REST API v3.
-
URL de entrega:
https://api.ewl-cr.com/webhooks/woocommerce - 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ó.
{
"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.