Webhooks
Recibe notificaciones en tiempo real cuando ocurren eventos en tu cuenta de Atoship. Los webhooks te permiten crear integraciones que reaccionan automáticamente a los eventos de envío.
Los webhooks son llamadas HTTP que notifican a tu aplicación cuando ocurren eventos en tu cuenta de Atoship. En lugar de consultar nuestra API una y otra vez para ver novedades, los webhooks envían los datos a tu servidor en tiempo real.
Actualizaciones en tiempo real
Recibe una notificación al instante cuando ocurre un evento
Menos llamadas a la API
No necesitas consultar continuamente para ver novedades
Flujos de trabajo automatizados
Activa acciones a partir de los eventos de envío
1. Crea un endpoint de webhook
curl -X POST https://atoship.com/api/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Order Notifications",
"url": "https://example.com/webhooks/atoship",
"event_types": ["label.purchased", "tracking.delivered"],
"retry_attempts": 3,
"timeout": 30
}'2. Respuesta
En la respuesta recibirás un secreto de webhook. Guárdalo de forma segura: lo necesitarás para verificar las firmas de los webhooks.
{
"id": "whk_abc123def456",
"name": "Order Notifications",
"url": "https://example.com/webhooks/atoship",
"secret": "whsec_a1b2c3d4e5f6...",
"_warning": "Save this secret securely!"
}Suscríbete a eventos específicos o usa all para recibir todos los eventos.Ver el detalle de los payloads de eventos →
Eventos de etiquetas
label.createdSe ha creado una nueva etiqueta de envíolabel.purchasedSe ha comprado una etiqueta de envío y está lista para usarselabel.voidedUna etiqueta de envío se ha anulado/canceladolabel.refundedSe ha procesado el reembolso de una etiqueta de envíoEventos de seguimiento
tracking.createdSe ha iniciado el seguimiento de un envíotracking.updatedSe ha actualizado el estado del seguimientotracking.deliveredEl paquete ha sido entregadotracking.exceptionSe ha producido una incidencia de seguimiento (retraso, devolución, etc.)Eventos de lotes
batch.createdSe ha creado una nueva operación por lotesbatch.completedUna operación por lotes se ha completado correctamentebatch.failedUna operación por lotes ha falladoEventos de formulario SCAN
scan_form.createdSe ha creado un nuevo formulario SCANscan_form.updatedSe ha actualizado el estado de un formulario SCANEventos de pago
payment.createdSe ha iniciado un pago/cargopayment.completedUn pago se ha completado correctamentepayment.failedUn pago ha falladoEventos de devolución
return.createdSe ha creado una etiqueta de devolución/RMAreturn.receivedSe ha recibido una devolución en el almacénreturn.completedUna devolución se ha procesado por completoEventos de seguro
insurance.purchasedSe ha contratado un seguro para un envíoinsurance.cancelledSe ha cancelado un seguroEventos de reclamación
claim.createdSe ha presentado una reclamación de seguroclaim.approvedSe ha aprobado una reclamación de seguroclaim.rejectedSe ha rechazado una reclamación de seguroTodos los payloads de webhook siguen un formato uniforme con el tipo de evento, la marca de tiempo y los datos correspondientes.
{
"id": "evt_abc123def456",
"object": "Event",
"type": "tracking.delivered",
"created_at": "2025-01-12T14:30:00.000Z",
"data": {
"object": {
"id": "lbl_xyz789",
"tracking_number": "9400111899223033005436",
"carrier": "USPS",
"status": "delivered",
"status_detail": "Package delivered to recipient",
"delivered_at": "2025-01-12T14:28:00.000Z",
"location": {
"city": "Los Angeles",
"state": "CA",
"zip": "90001"
}
},
"previous_attributes": {
"status": "out_for_delivery"
}
}
}Campos del payload
id- Identificador único del eventotype- Tipo de evento (p. ej., tracking.delivered)created_at- Cuándo ocurrió el eventodata.object- El recurso afectadodata.previous_attributes- Campos modificados (si aplica)
Encabezados HTTP
X-Atoship-Signature- Firma HMACX-Atoship-Event- Tipo de eventoX-Atoship-Delivery- ID del intento de entregaContent-Type- application/json
Buena práctica de seguridad
Verifica siempre las firmas de los webhooks para asegurarte de que las solicitudes provienen de Atoship y no han sido manipuladas. Nunca proceses webhooks sin verificar la firma en producción.
Cada webhook incluye un encabezado X-Atoship-Signatureque contiene una firma HMAC-SHA256 del payload generada con tu secreto de webhook.
import crypto from 'crypto';
function verifyWebhookSignature(
payload: string,
signature: string,
secret: string
): boolean {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// Usage in your webhook handler
app.post('/webhooks/atoship', (req, res) => {
const signature = req.headers['x-atoship-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Process the webhook...
const event = req.body;
console.log('Received event:', event.type);
res.status(200).send('OK');
});Si tu endpoint devuelve un código de estado distinto de 2xx o se agota el tiempo de espera, reintentaremos la entrega del webhook.
Calendario de reintentos
- • Intento 1: Inmediato
- • Intento 2: Después de 1 minuto
- • Intento 3: Después de 5 minutos
- • Intento 4: Después de 30 minutos
- • Intento 5: Después de 2 horas
Criterios de éxito
- • Estado HTTP 200-299
- • Respuesta dentro del tiempo de espera (30 s por defecto)
- • Conexión establecida
Opciones configurables
retry_attempts- Número de reintentos (0-10, 3 por defecto)timeout- Tiempo de espera de la solicitud en segundos (5-60, 30 por defecto)
Sí
- Devuelve 200 de inmediato y procesa de forma asíncrona
- Verifica siempre las firmas de los webhooks
- Gestiona los eventos duplicados de forma idempotente
- Usa únicamente endpoints HTTPS
- Registra los payloads de los webhooks para depurar
No
- No realices procesamiento pesado antes de responder
- No ignores la verificación de la firma
- No des por hecho que los eventos llegan en orden
- No uses endpoints HTTP (no seguros)
- No expongas tu secreto de webhook
/v1/webhooksLista todos los endpoints de webhook
/v1/webhooksCrea un nuevo endpoint de webhook
/v1/webhooks/:idObtén un endpoint de webhook
/v1/webhooks/:idActualiza un endpoint de webhook
/v1/webhooks/:idElimina un endpoint de webhook
/v1/webhooks/:id/testEnvía un webhook de prueba para verificar tu endpoint