Guía de Integración

Conectar tu tienda online con Radiate

Cotizá envíos en tiempo real, despachá pedidos automáticamente a la red de repartidores, seguí el estado de cada entrega y cancelá despachos si el cliente cancela la orden. Todo con una API key.

1Autenticación con API Key

Las peticiones de comercio requieren tu clave secreta, que se genera al registrar el comercio y queda en el portal (/merchant → "Desarrolladores & API"). Un administrador aprueba el alta del comercio antes de que pueda despachar. El rastreo público no requiere clave.

http
Authorization: Bearer rad_live_TU_API_KEY

gpp_goodClaves rad_live_ (producción) y rad_test_ (sandbox). Cada clave tiene su límite de solicitudes por minuto y responde 429 + Retry-After al superarlo.

2Cotizar Envío en el CheckoutPOST /api/v1/shipments/quote

Ejemplo Payload JSONapplication/json
{
  "pickup_address": "Av. Belgrano 450, Salta Capital",
  "delivery_address": "B° Tres Cerritos, Los Eucaliptos 120",
  "package_size": "small",
  "declared_value": 15000
}

Responde el costo total (total_cost), la ganancia del repartidor y la comisión de la plataforma. La cotización coincide siempre con el cargo final del despacho.

3Crear Despacho al Confirmar PagoPOST /api/v1/shipments/create

Ejemplo Payload JSONapplication/json
{
  "external_order_id": "ORD-10948", // ID de la orden en tu tienda
  "pickup_address": "Av. Belgrano 450, Salta",
  "pickup_contact_name": "Mi Tienda Local Centro",
  "pickup_contact_phone": "+54 9 387 500-1122",
  "delivery_address": "B° Tres Cerritos, Los Eucaliptos 120",
  "delivery_contact_name": "Mariana Gómez",
  "delivery_contact_phone": "+54 9 387 455-6677",
  "package_size": "small",
  "declared_value": 24500,
  "is_cod": false,
  "cod_amount": 0
}

La respuesta incluye el tracking_code, el security_pin (lo comunicás al comprador: el repartidor lo pedirá al entregar), el desglose de cobro (billing) y el tracking_url para el comprador. Se dispara el webhook shipment.requested.

Idempotencia: si reenviás el mismo external_order_id (timeout de red, reintento), Radiate no crea un duplicado: responde el despacho existente con "duplicate": true y sin generar un nuevo cargo. Es seguro reintentar.

Cobro: al crear, el costo se acredita a tu cuenta corriente. Si superás tu límite de crédito, el despacho se rechaza con 402 y no entra a la bolsa. Consultá tu saldo con GET /billing/balance.

4Rastreo PúblicoGET /api/v1/tracking

Sin API key: consultá el estado del envío por código de tracking y devolvés el link al comprador para que siga su pedido (con el repartidor asignado y la línea de tiempo). Límite: 60 consultas/minuto por IP.

GET /api/v1/tracking?code=RD-894102

{
  "success": true,
  "data": {
    "tracking_code": "RD-894102",
    "status": "in_transit",
    "delivery_address": "B° Tres Cerritos, Los Eucaliptos 120",
    "driver": { "name": "Carlos Gómez", "phone": "+54 9 387 512-3456" },
    "events": [
      { "status": "requested", "label": "Pedido despachado por el comercio", "at": "2026-08-21T12:00:00Z" },
      { "status": "assigned", "label": "Repartidor asignado", "at": "2026-08-21T12:05:00Z" }
    ]
  }
}

5Webhooks en Tiempo RealFirma HMAC

Cada cambio de estado dispara un POST firmado a tu webhook_url (configurable en el portal). Eventos: shipment.requested, assigned, picked_up, in_transit, delivered y cancelled.

POST → tu webhook_url
Header: X-Radiate-Signature: sha256=<HMAC del body con tu webhook_secret>

{
  "event": "shipment.delivered",
  "timestamp": "2026-08-21T12:30:00Z",
  "data": {
    "tracking_code": "RD-894102",
    "external_order_id": "ORD-10948",
    "status": "delivered",
    "driver": { "name": "Carlos Gómez", "phone": "+54 9 387 512-3456" },
    "tracking_url": "https://www.radiate.com.ar/track?code=RD-894102"
  }
}
Verificación de firma (Node.js)
const crypto = require('crypto');

function verifySignature(rawBody, signature, secret) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature), Buffer.from(expected)
  );
}

Respondé 2xx para confirmar. Si tu endpoint falla, Radiate reintenta con backoff exponencial (hasta 5 intentos).

6Consultar Envíos y ReconciliarAPI Key

Consultá tus despachos y tu cuenta corriente sin depender de los webhooks (ideal para reconciliar tras un reintento o un webhook perdido). Todas requieren API key.

Listar envíos con filtros
GET /api/v1/shipments?external_order_id=ORD-10948
GET /api/v1/shipments?status=in_transit&date_from=2026-09-01T00:00:00Z&limit=20
GET /api/v1/shipments?tracking_code=RD-894102

→ billing, cod, security_pin, invoiced,
  timestamps y paginación (limit/offset)
Detalle con timeline completo
GET /api/v1/shipments/:id

→ status, driver, events[] (timeline),
  proof_of_delivery, cancel_reason
Estado de cuenta corriente
GET /api/v1/billing/balance

{
  "current_balance_ars": 123450,
  "credit_limit_ars": 250000,
  "credit_available_ars": 126550,
  "pending_invoices_count": 1,
  "uninvoiced_shipments_count": 8
}
Facturas
GET /api/v1/billing/invoices?status=pending

→ invoice_number, periodo, envíos,
  subtotal/impuestos/total, vencimiento

7Cancelar un DespachoPOST /api/v1/shipments/:id/cancel

Si el cliente cancela la orden, cancelá el despacho mientras sigue en la bolsa (sin repartidor asignado). Si el envío aún no está facturado, el costo se devuelve a tu cuenta corriente y se dispara el webhook shipment.cancelled.

curl -X POST https://www.radiate.com.ar/api/v1/shipments/ENVIO_ID/cancel \
  -H "Authorization: Bearer rad_live_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "El cliente canceló la orden ORD-10948" }'

→ 200 { "refunded": true, "refund_amount_ars": 5075 }
  409 (ya tiene repartidor o ya fue procesado)
  404 (no existe o no es de tu comercio)

8Ejemplos (cURL)

# 1. Cotizar
curl -X POST https://www.radiate.com.ar/api/v1/shipments/quote \
  -H "Authorization: Bearer rad_live_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "pickup_address": "Av. Belgrano 450, Salta", "delivery_address": "B° Tres Cerritos 120", "package_size": "small" }'

# 2. Crear despacho
curl -X POST https://www.radiate.com.ar/api/v1/shipments/create \
  -H "Authorization: Bearer rad_live_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "external_order_id": "ORD-10948", "delivery_address": "B° Tres Cerritos 120", "delivery_contact_name": "Mariana Gómez", "delivery_contact_phone": "+54 9 387 455-6677" }'

# 3. Consultar por tu order id
curl "https://www.radiate.com.ar/api/v1/shipments?external_order_id=ORD-10948" \
  -H "Authorization: Bearer rad_live_TU_API_KEY"

# 4. Saldo y facturas
curl "https://www.radiate.com.ar/api/v1/billing/balance" -H "Authorization: Bearer rad_live_TU_API_KEY"
curl "https://www.radiate.com.ar/api/v1/billing/invoices" -H "Authorization: Bearer rad_live_TU_API_KEY"
bolt

¿Listo para probar la API?

Registrá tu comercio y obtené tus claves Live y Sandbox al instante.

add_businessRegistrar Comercio