WSL · Integraciones
API de pedidos
Conecta tu tienda con WSL y añade los datos del destinatario al seguimiento de cada encomienda.
El alta guarda datos del pedido; los movimientos logísticos siguen siendo una simulación. Los ejemplos usan datos ficticios.
Servidor a servidor
Clave secreta en X-API-Key. Nunca desde el navegador.
20 días de conservación
Desde la primera recepción. Los reintentos no amplían el plazo.
Consulta protegida
Contacto enmascarado; destino sin calle ni número.
1. Conexión y autorización
Publica WSL antes de conectar una tienda externa. Utiliza el dominio HTTPS publicado de WSL como WSL_BASE_URL y guarda la misma clave aleatoria de al menos 32 caracteres como WSL_API_KEY en ambos servidores. Puedes crearla con un gestor de contraseñas. No la incluyas en el código público, enlaces, registros ni variables del navegador.
POST /api/public/shipments
Content-Type: application/json
X-API-Key: [clave guardada en tu servidor]No se habilita acceso directo desde navegadores externos. La tienda debe llamar a WSL desde su servidor después de registrar el pedido. Tamaño máximo: 16 KiB por solicitud. Solo se acepta un pedido por solicitud.
2. Datos del pedido
| Campo | Obligatorio | Formato |
|---|---|---|
| trackingCode | Sí | 8–24 letras A–Z o números. Se normaliza a mayúsculas, sin espacios ni guiones. Código único por pedido. |
| orderDate | Sí | Fecha ISO 8601 con zona horaria (Z o +02:00). No puede ser futura. |
| customer.name | Sí | Nombre del destinatario, de 1 a 120 caracteres. |
| customer.email | Sí | Email válido, máximo 254 caracteres. |
| customer.phone | Sí | Teléfono, 7–30 caracteres; admite +, espacios, paréntesis y guiones. |
| address.line1 | Sí | Calle y número, máximo 200 caracteres. |
| address.line2 | No | Piso, puerta u otra información, máximo 200 caracteres. Omitir si no aplica. |
| address.city | Sí | Ciudad de destino, máximo 100 caracteres. |
| address.postalCode | Sí | Código postal español de cinco dígitos, provincias 01–52. |
| address.country | Sí | ES. Esta simulación solo contempla destinos en España. |
Los campos adicionales no se aceptan. La fecha del pedido es informativa: la simulación comienza al crear el envío en WSL, no se retrocede a esa fecha.
{
"trackingCode": "WSL123456789ES",
"orderDate": "2026-10-07T14:30:00+02:00",
"customer": {
"name": "Ana García",
"email": "ana@example.com",
"phone": "+34 600 123 456"
},
"address": {
"line1": "Calle de Ejemplo 12",
"line2": "2º B",
"city": "Valencia",
"postalCode": "46001",
"country": "ES"
}
}3. Enviar desde otro sitio
Ejemplo con curl
curl --request POST "$WSL_BASE_URL/api/public/shipments" \
--header "Content-Type: application/json" \
--header "X-API-Key: $WSL_API_KEY" \
--data '{
"trackingCode": "WSL123456789ES",
"orderDate": "2026-10-07T14:30:00+02:00",
"customer": {
"name": "Ana García",
"email": "ana@example.com",
"phone": "+34 600 123 456"
},
"address": {
"line1": "Calle de Ejemplo 12",
"line2": "2º B",
"city": "Valencia",
"postalCode": "46001",
"country": "ES"
}
}'JavaScript · solo en el servidor de tu tienda
const baseUrl = process.env.WSL_BASE_URL;
const apiKey = process.env.WSL_API_KEY;
if (!baseUrl || !apiKey) throw new Error("Configura la integración WSL");
const response = await fetch(new URL("/api/public/shipments", baseUrl), {
method: "POST",
headers: { "Content-Type": "application/json", "X-API-Key": apiKey },
body: JSON.stringify(pedido), // objeto con el formato anterior
});
const result = await response.json();
if (!response.ok) {
// Maneja result.error; no registres datos personales ni la clave.
throw new Error("No se pudo registrar el pedido en WSL");
}
const trackingUrl = new URL(result.trackingPath, baseUrl).href;
// Incluye trackingUrl en la confirmación del pedido de tu cliente.Ante un fallo de conexión o un error 500, reintenta con el mismo código y exactamente los mismos datos, usando espera progresiva. Un reintento idéntico devuelve 200 y conserva la caducidad original. Si el código ya contiene datos distintos, devuelve 409: no sobrescribe el destinatario.
4. Respuestas
{
"trackingCode": "WSL123456789ES",
"created": true,
"expiresAt": "2026-10-28T12:00:00.000Z",
"trackingPath": "/seguimiento/WSL123456789ES",
"simulated": true
}Ejemplo ilustrativo: expiresAt siempre corresponde a 20 días desde la recepción efectiva.
- 201 · Creado
- El pedido y sus datos se guardaron correctamente.
- 200 · Reintento idéntico
- Ya existe; no se amplía la conservación ni se reinicia el recorrido.
- 400 · Datos no válidos
- JSON incorrecto o campos inválidos. Los errores de validación incluyen fields con path y message, sin reproducir los datos recibidos.
- 401 · No autorizado
- Falta la clave o no es válida.
- 409 · Código en uso
- Existe otro contenido para el mismo código. No se modifica.
- 413 / 415
- Solicitud demasiado grande o Content-Type incorrecto.
- 500 / 503
- Fallo temporal o integración sin configurar. Un 503 también aparece si la clave guardada tiene menos de 32 caracteres.
5. Privacidad y seguimiento
- Nombre, email, teléfono, dirección y fecha del pedido se guardan durante 20 días desde la primera recepción. La eliminación automática se revisa cada minuto; el retraso máximo previsto es de un minuto.
- Los datos vencidos dejan de estar disponibles para consulta inmediatamente, incluso antes de la eliminación física. Esta eliminación se refiere a los registros activos; no garantiza eliminación inmediata de copias de seguridad del alojamiento.
- La página pública muestra el nombre completo, el inicio del email con su dominio visible, los últimos cuatro dígitos del teléfono, ciudad, código postal y fecha del pedido. Cualquier persona con el código puede ver estos datos; evita compartirlo públicamente. La calle, el piso y el número nunca se devuelven en la consulta pública.
- Las etapas finales de la simulación utilizan la ciudad del cliente. No representan un envío real ni una garantía de entrega.
- Al vencer el plazo, el seguimiento básico simulado permanece sin datos del cliente y vuelve al recorrido genérico. No reutilices códigos entre distintos pedidos.
- La tienda debe informar al cliente de esta transferencia y contar con la base legal adecuada. Prueba primero con datos ficticios y confirma los datos legales y de contacto de WSL antes de enviar datos reales.
