Recibís tus credenciales
SellerGo te entrega apiUser, apiPassword y apiKey. La API es privada: solo clientes con cuenta.
La API de Integraciones de SellerGo te deja cotizar entre carriers, generar envíos con etiqueta y seguir el tracking, directo desde tu plataforma. Simple para vos. Inteligente para tu negocio.
SellerGo te entrega apiUser, apiPassword y apiKey. La API es privada: solo clientes con cuenta.
Con las 3 credenciales hacés login y recibís un JWT que vence a las 2 horas. Lo renovás cuando expira.
Mandás el token como Authorization: Bearer y ya podés cotizar, crear envíos, bajar etiquetas y trackear.
https://api.sellergo.com.ar/api/v1/integrationsLogin con las 3 credenciales → devuelve el token Bearer.
/auth/logincurl -X POST https://api.sellergo.com.ar/api/v1/integrations/auth/login \
-H 'Content-Type: application/json' \
-d '{"apiUser":"int_xxx","apiPassword":"xxx","apiKey":"slg_xxx"}'
// → { "token": "eyJ...", "tokenType": "Bearer", "expiresIn": 7200 }Un request, todas las opciones: cada cotización trae el carrier, el precio final y la ETA para que elijas con cuál despachar. Mandá un elemento en packages por cada bulto, con su peso en kg y sus medidas en cm.
/quote{
"origin": { "postalCode": "1414", "province": "Capital Federal" },
"destination": { "postalCode": "5000", "province": "Cordoba" },
"serviceType": "Agencia a Domicilio",
"declaredValue": 5000,
"packages": [
{ "weight": 12.5, "length": 60, "width": 50, "height": 40 },
{ "weight": 2, "length": 20, "width": 15, "height": 10 }
]
}Tipo de servicio:serviceType acepta el mismo valor que el alta (AGENCY_HOME | AGENCY_AGENCY) o el nombre ("Agencia a Domicilio" | "Agencia a Agencia").
Varios bultos: cada carrier los opera a su manera y el precio lo refleja. Algunos tarifan bulto por bulto (dos bultos cuestan el doble que uno) y otros despachan el envío entero en una sola guía, cobrando por el peso y el volumen sumados y emitiendo un rótulo por bulto. Los que no admiten varios bultos en una guía no aparecen en la respuesta: darte un precio que después no se puede despachar sería peor que no ofrecerlo.
Peso volumétrico: si mandás las medidas, cada bulto se cobra por el mayor entre su peso real y su aforo (volumen × 250 kg/m³) y recién después se suman. Te recomendamos mandar siempre las medidas para que el precio coincida con lo que factura el carrier.
Formato anterior:weight + dimensions + pieces sigue funcionando y describe N bultos iguales de ese peso y esas medidas.
Geografía: no necesitás cargar códigos postales ni provincias — mandá el CP como texto y el nombre de la provincia; SellerGo los resuelve contra su propia base (entiende "Capital Federal", "CABA", acentos, etc.).
El precio lo determina SellerGo (recotiza server-side) y se cobra a tu cuenta corriente — no mandás precio. Usá el header X-Idempotency-Key (ej. tu número de pedido) para que un reintento no duplique el envío.
/shipments{
"carrierId": "andreani",
"serviceType": "AGENCY_HOME",
"origin": { "postalCode": "1414", "province": "Capital Federal", "name": "Mi Depósito", "address": "Calle 1 123" },
"destination": { "postalCode": "5000", "province": "Cordoba", "name": "Juan Perez", "address": "Av 2 456", "phone": "351..." },
"packages": [
{ "weight": 12.5, "length": 60, "width": 50, "height": 40 },
{ "weight": 2, "length": 20, "width": 15, "height": 10 }
],
"declaredValue": 5000,
"reference": "pedido-1234"
}
// → { "id": "...", "sellergoTrackingCode": "SG...", "price": 8684, "labelUrl": "..." }Mandá los mismos bultos con los que cotizaste: el precio se recalcula sobre esa lista y es esa lista la que se le declara al carrier.
Para envíos a sucursal (AGENCY_AGENCY) mandá carrierBranchId con el id de una agencia del carrier:
/carrier-branches?carrierId=andreani&search=cordobaAgencias del carrier (paginado)/shipments?reference=pedido-1234o ?idempotencyKey= Si se perdió la respuesta del alta, buscá el envío por tu reference o por la X-Idempotency-Key que usaste (coincidencia exacta, solo tus envíos). Si no aparece, el alta no se creó y podés reintentarla con la misma key.
/shipments/{codigo}/cancelCancela y devuelve el cargo// → { "trackingCode": "SG...", "status": "CANCELLED", "refunded": 8684, "alreadyCancelled": false } Se puede cancelar un envío ya registrado en el courier (QUOTED, READY_FOR_PICKUP, ASSIGNED) antes de que el courier retire el paquete; en otro estado responde 409 INVALID_STATUS_TRANSITION. Si el envío tiene guía y el courier no permite anularla por API, responde 409 CARRIER_CANCEL_UNAVAILABLE sin tocar el envío: pedile la cancelación a SellerGo. Si el cargo ya salió en la factura del cierre de período de tu cuenta corriente, responde 409 SHIPMENT_PERIOD_INVOICED y no se toca nada: un envío facturado no se cancela. Es idempotente: un reintento devuelve alreadyCancelled: true y no devuelve la plata dos veces.
/shipments/{codigo}/labelPDF de la etiqueta/shipments/{codigo}/trackingEstado, guía del courier e historial de eventos La etiqueta puede responder 409 LABEL_NOT_READY, y no es un error definitivo: algunos carriers no tienen API y su rótulo oficial llega de forma asincrónica. Hasta que llega no entregamos el PDF, porque una etiqueta sin el rótulo del courier es indistinguible de una completa y terminaría en un bulto despachado sin él. A los 15 minutos del alta se entrega igual, sólo con la etiqueta SellerGo y marcada.
Si imprimís automáticamente: tratá el 409 como “todavía no” y reintentá en unos minutos, y antes de dar una impresión por buena mirá el header X-Label-Estado (lista | solo-sellergo) y X-Label-Rotulo-Carrier (incluido | ausente).
Rate-limit por credencial: 120 req/min por defecto (headers X-RateLimit-*). Todas las llamadas quedan auditadas.
Todos los errores tienen el mismo shape. Matcheá por code, no por el texto: error/message son legibles y pueden cambiar de redacción; code es contrato estable. Incluí el requestId en cualquier reporte a soporte.
{
"error": "El carrier elegido no cotiza para esa ruta/servicio/peso",
"success": false,
"code": "VALIDATION_ERROR",
"message": "El carrier elegido no cotiza para esa ruta/servicio/peso",
"details": null,
"requestId": "57a550e8-…"
}| HTTP | code | Significado |
|---|---|---|
400 / 422 | VALIDATION_ERROR · INVALID_REQUEST | Datos inválidos (details indica qué campo falló) |
401 | AUTH_TOKEN_EXPIRED · AUTH_INVALID_TOKEN · AUTH_UNAUTHORIZED | Token vencido, inválido o ausente — volvé a hacer login |
402 | PAYMENT_REQUIRED | Sin crédito en la cuenta corriente |
404 | SHIPMENT_NOT_FOUND · RESOURCE_NOT_FOUND | El envío/recurso no existe o no es tuyo |
400 | CARRIER_NO_QUOTE | El carrier no cotiza esa ruta/servicio/peso |
409 | IDEMPOTENCY_CONFLICT | Otra operación idéntica en curso — esperá y reintentá |
409 | INVALID_STATUS_TRANSITION · CARRIER_CANCEL_UNAVAILABLE · SHIPMENT_PERIOD_INVOICED | El envío no se puede cancelar en su estado, el courier no permite cancelar por API, o ya está facturado en el cierre de período |
429 | RATE_LIMIT | Rate-limit excedido — mirá el header Retry-After |
502 | CARRIER_UNAVAILABLE · CARRIER_REJECTED | El carrier está caído o rechazó el envío |
500 | INTERNAL_ERROR | Error nuestro — reportalo con el requestId |
Escribinos y te damos las credenciales y la documentación de la API para arrancar tu integración.