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

CampoObligatorioFormato
trackingCodeSí8–24 letras A–Z o números. Se normaliza a mayúsculas, sin espacios ni guiones. Código único por pedido.
orderDateSíFecha ISO 8601 con zona horaria (Z o +02:00). No puede ser futura.
customer.nameSíNombre del destinatario, de 1 a 120 caracteres.
customer.emailSíEmail válido, máximo 254 caracteres.
customer.phoneSíTeléfono, 7–30 caracteres; admite +, espacios, paréntesis y guiones.
address.line1SíCalle y número, máximo 200 caracteres.
address.line2NoPiso, puerta u otra información, máximo 200 caracteres. Omitir si no aplica.
address.citySíCiudad de destino, máximo 100 caracteres.
address.postalCodeSíCódigo postal español de cinco dígitos, provincias 01–52.
address.countrySí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.
Consultar privacidad