DocumentaciónCarrito
Carrito
Cotiza y genera órdenes, sube guías de envío, administra las direcciones de tus clientes y consulta los catálogos de apoyo (métodos de pago, usos de CFDI, fleteras, sucursales, países, estados y colonias).
Cotizar / generar orden
Bearerscope: carritoCotiza un carrito con precios, descuentos y costo de envío ya calculados. En modo de prueba obtienes la cotización completa sin generar el pedido.
curl -X POST https://developers.syscom.mx/api/v1/carrito/generar \
-H 'Authorization: Bearer TU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"testmode": true,
"tipo_entrega": "sucursal",
"direccion": { "sucursal": "chihuahua", "atencion_a": "PRUEBA API" },
"metodo_pago": "transferencia",
"tipo_pago": "PUE",
"moneda": "usd",
"uso_cfdi": "G01",
"productos": [{ "id": 210627, "cantidad": 1, "tipo": "nuevo" }]
}'Cuerpo de la petición
productosarrayrequerido[{ "id": 223114, "cantidad": 2, "tipo": "nuevo" }, ...]Lista de objetos JSON, máximo 50 productos por orden: • id — ID del producto en SYSCOM, el mismo que devuelve /productos; número o texto numérico ("223114"). • cantidad — piezas de ese producto; entero desde 1, número o texto numérico. • tipo — condición de la pieza: nuevo o caja abierta (a, b, c); ver más en la Política Caja Abierta. Si algún producto no existe o no está a la venta, el pedido no se crea: responde 400 (productos_no_encontrados) indicando cuáles. Si algún producto no tiene existencia suficiente, el pedido no se crea. Si un producto no se puede surtir completo desde un solo almacén, se reparte entre varios siguiendo el orden de cercanía a tu dirección, y su campo almacenes muestra cada almacén con sus piezas (p.ej. {"Guadalajara": 1, "Villahermosa": 2}). Si el producto es un kit, la respuesta incluye sus componentes con el almacén que surte cada uno. Cuando un kit no se puede armar completo desde un solo almacén y sus componentes salen de varios, en su campo almacenes se reporta como "multiples_almacenes" (y cada componente indica su almacén real). Los kits y productos que sí se completan de un almacén muestran el nombre real del almacén.
tipo_entregastringrequeridosucursal (recolección en sucursal SYSCOM), domicilio (envío a domicilio con fletera) u ocurre (envío para recoger en la paquetería), guia_cliente (adjunta tus propias guías).
direccionobject|stringObjeto (o string JSON) con la dirección. Los campos exigidos dependen de tipo_entrega. Todos aceptan texto o número (se convierten a texto). Con tipo_entrega = sucursal: • sucursal — texto, REQUERIDO. Sucursal de recolección; consulta las disponibles en GET /api/v1/carrito/sucursales y usa el valor de "codigo" de su respuesta (p.ej. "chihuahua"). • atencion_a — texto, opcional, max length 120. Quién recoge. Con tipo_entrega = domicilio u ocurre: • atencion_a — texto, requerido, max length 120. Quién recibe. • calle — texto, requerido, max length 100. • num_ext — texto, requerido, max length 20. • num_int — texto, opcional, max length 20. • colonia — texto, requerido, max length 100. • ciudad — texto, requerido, max length 100. • estado — texto, requerido, max length 4 (catálogo de estados). • pais — texto, requerido, max length 3 (catálogo de países). • codigo_postal — texto, requerido, max length 5 en México y 10 para otros países. • telefono — texto, requerido, max length 20.
fleterastringCódigo de fletera (catálogo de fleteras). Obligatoria en entregas a domicilio y por ocurre (en ocurre debe ser terrestre: no se admiten las de día siguiente — estafeta_siguiente, dhl_siguiente — porque el paquete se recoge en la paquetería); en sucursal no se usa. dypaq solo aplica cuando la dirección de entrega tiene cobertura DYPAQ — puedes prevalidarlo con GET /api/v1/carrito/fleteras?codigo_postal=; sin cobertura responde 422 con error_code 9015 ('La fletera no tiene cobertura en la direccion ingresada.').
monedastringusd (def.) o mxn.
uso_cfdistringrequeridoCódigo de uso de CFDI (catálogo de usos de CFDI).
metodo_pagostringrequeridoClave del método de pago (catálogo de métodos de pago): transferencia, sucursal-*, credito-* (7/15/30/30+).
tipo_pagostringPUE (def.) o PPD; afecta forma_pago. En crédito siempre sale PPD (el catálogo solo anuncia PPD en credito-*); en los demás métodos solo PUE (un PPD recibido cae a PUE en silencio).
orden_comprastringReferencia de orden de compra del cliente (opcional).
ordenarflagtrue → convierte la cotización en pedido real (genera folio_pedido y aparta existencias); requiere stock suficiente. Default: false (solo cotización). Si un kit no tiene existencia suficiente, el mensaje de error puede terminar en "(limita: <código>)", indicando qué componente es el que falta.
testmodeflagtrue → solo cotiza, no genera el pedido (recomendado para pruebas).
forzar_sucursalflagtrue → fuerza a surtir todo desde una sola sucursal, IMPORTANTE: si la sucursal no cuenta con el stock necesario aparecerá error de stock insuficiente. Default: false (se consideran todos los almacenes).
pdf_guiafileSolo en entregas a domicilio y enviando el body como multipart/form-data: adjunta tu guía prepagada, el pedido se envía con tu paquetería y no se cobra flete. jpg/png/jpeg/doc/docx/pdf, máx. 6 MB.
Códigos de estado
Cotización calculada (o error de validación de negocio en { error }).
Algún dato del pedido es inválido o falta: la respuesta incluye detalles[] con el campo, el problema y un ejemplo. También cuando un producto no existe o no está a la venta (code: productos_no_encontrados): en ese caso values trae la lista de ids que no existen o no están a la venta.
La dirección está bien formada pero no es válida contra el catálogo (país inexistente, código postal que no corresponde al estado, colonia fuera del CP), o la fletera no tiene cobertura en la dirección (error_code 9015). (Con fletera=guia_cliente la dirección no se valida.)
Token ausente, inválido o revocado.
Cuenta sin acceso o sin scope carrito.
Método no permitido (usar POST).
Límite de peticiones excedido.
Pedido real (sin testmode) deshabilitado en el servidor.
Error interno.
Subir guía
Bearerscope: carritoSube tu guía de envío prepagada a tus pedidos: el pedido queda marcado para enviarse con tu paquetería (sin mensajería de SYSCOM). Acepta imágenes y PDF de hasta 6 MB.
curl -X POST https://developers.syscom.mx/api/v1/carrito/guia \
-H 'Authorization: Bearer TU_TOKEN' \
-F 'folio=000000' \
-F '[email protected]'Cuerpo de la petición
foliostringrequeridoFolio de tu pedido o cotización. También funciona el folio de un pedido que ya se procesó.
pdf_guiafilerequeridoArchivo de la guía (jpg/png/jpeg/doc/docx/pdf, máx. 6 MB).
Códigos de estado
Guía registrada (o { error } si: no encontramos ese folio en tu cuenta, el pedido tiene entrega en sucursal, o el formato del archivo es inválido).
folio vacío o ausente, o pdf_guia ausente.
Token ausente, inválido o revocado.
Cuenta sin acceso o sin scope carrito.
Límite de peticiones excedido.
Error interno.
Direcciones de envío
Bearerscope: carritoLista las direcciones de envío guardadas del cliente.
curl 'https://developers.syscom.mx/api/v1/carrito/direcciones' \
-H 'Authorization: Bearer TU_TOKEN'Códigos de estado
Direcciones del cliente (arreglo).
Token ausente, inválido o revocado.
Cuenta sin acceso o sin scope carrito.
Límite de peticiones excedido.
Error interno.
Crear dirección
Bearerscope: carritoGuarda una nueva dirección de envío. Valida el país y, para México, el estado según el código postal.
curl -X POST https://developers.syscom.mx/api/v1/carrito/direcciones \
-H 'Authorization: Bearer TU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"atencion_a": "Juan Perez",
"calle": "Av. Tecnologico",
"num_ext": "1234",
"colonia": "Centro",
"ciudad": "Chihuahua",
"estado": "CHIH",
"pais": "MEX",
"codigo_postal": "31000",
"telefono": "6141234567"
}'Cuerpo de la petición
atencion_astringrequeridoPersona/atención. Max length 120.
callestringrequeridoCalle. Max length 100.
num_extstringrequeridoNúmero exterior. Max length 20.
num_intstringNúmero interior (opcional). Max length 20.
coloniastringrequeridoColonia. Max length 100.
ciudadstringrequeridoCiudad. Max length 100.
estadostringrequeridoCódigo del estado: usa el valor de estado_sat que devuelve /carrito/estados para tu código postal (p.ej. CHIH para Chihuahua; NO es el código numérico SAT). Max length 4 en México y 60 en otros países; en México se valida contra el CP.
paisstringrequeridoCódigo de país, max length 3 (ver /carrito/paises, p.ej. MEX).
codigo_postalstringrequeridoCódigo postal. Max length 5 en México y 10 para otros países.
telefonostringrequeridoTeléfono. Max length 20.
Códigos de estado
Dirección creada.
Faltan parámetros obligatorios de la dirección.
País inexistente, o el código postal no corresponde al estado indicado.
Token ausente, inválido o revocado.
Cuenta sin acceso o sin scope carrito.
Límite de peticiones excedido.
Error interno.
Actualizar dirección
Bearerscope: carritoActualiza una dirección de envío. Debes enviar todos los datos, porque reemplaza la dirección completa.
curl -X PUT https://developers.syscom.mx/api/v1/carrito/direcciones/901 \
-H 'Authorization: Bearer TU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"atencion_a": "Juan Perez",
"calle": "Av. Tecnologico",
"num_ext": "1234",
"colonia": "Centro",
"ciudad": "Chihuahua",
"estado": "CHIH",
"pais": "MEX",
"codigo_postal": "31000",
"telefono": "6149876543"
}'Parámetros
idnumberrequeridoID de la dirección.
Cuerpo de la petición
atencion_astringrequeridoPersona/atención. Max length 120.
callestringrequeridoCalle. Max length 100.
num_extstringrequeridoNúmero exterior. Max length 20.
num_intstringNúmero interior (opcional). Max length 20.
coloniastringrequeridoColonia. Max length 100.
ciudadstringrequeridoCiudad. Max length 100.
estadostringrequeridoCódigo del estado: usa el valor de estado_sat que devuelve /carrito/estados para tu código postal (p.ej. CHIH para Chihuahua; NO es el código numérico SAT). Max length 4 en México y 60 en otros países; en México se valida contra el CP.
paisstringrequeridoCódigo de país, max length 3 (ver /carrito/paises).
codigo_postalstringrequeridoCódigo postal. Max length 5 en México y 10 para otros países.
telefonostringrequeridoTeléfono. Max length 20.
Códigos de estado
Dirección actualizada.
id inválido o faltan parámetros obligatorios.
País inexistente, o el código postal no corresponde al estado indicado.
Token ausente, inválido o revocado.
Cuenta sin acceso o sin scope carrito.
Límite de peticiones excedido.
Error interno.
Eliminar dirección
Bearerscope: carritoElimina una dirección de envío del cliente.
curl -X DELETE https://developers.syscom.mx/api/v1/carrito/direcciones/901 \
-H 'Authorization: Bearer TU_TOKEN'Parámetros
idnumberrequeridoID de la dirección.
Códigos de estado
Dirección eliminada.
id inválido.
Token ausente, inválido o revocado.
Cuenta sin acceso o sin scope carrito.
Límite de peticiones excedido.
Error interno.
Métodos de pago
Bearerscope: carritoFormas de pago disponibles para el pedido (transferencia, pago en sucursal, crédito, etc.), con su descuento y plazo.
curl 'https://developers.syscom.mx/api/v1/carrito/pago' \
-H 'Authorization: Bearer TU_TOKEN'Códigos de estado
Catálogo de métodos de pago.
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso o scope `carrito` insuficiente.
Límite de peticiones excedido.
Error interno.
Usos de CFDI
Bearerscope: carritoUsos de CFDI disponibles para la facturación del pedido.
curl 'https://developers.syscom.mx/api/v1/carrito/cfdi' \
-H 'Authorization: Bearer TU_TOKEN'Códigos de estado
Catálogo de usos de CFDI.
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso o scope `carrito` insuficiente.
Límite de peticiones excedido.
Error interno.
Fleteras
Bearerscope: carritoPaqueterías disponibles para el envío, indicando cuáles ofrecen entrega al día siguiente. Cada fletera incluye el campo `cobertura`: las nacionales cubren casi todo el país (`estandar`); DYPAQ depende del código postal — sin CP sale como `valide_codigo_postal` (aún no se sabe), y con un CP válido te confirma si tiene cobertura en esa zona (`si`/`no`). Así sabes antes de cotizar si DYPAQ aplica.
curl 'https://developers.syscom.mx/api/v1/carrito/fleteras' \
-H 'Authorization: Bearer TU_TOKEN'Parámetros de consulta
codigo_postalstringOpcional. Código postal de la dirección de entrega (4-5 dígitos). Actualiza el cobertura de DYPAQ: si si cubre esa zona, no si no. Sin este param DYPAQ sale como valide_codigo_postal.
Códigos de estado
Catálogo de fleteras. DYPAQ siempre aparece al final: su `cobertura` es `valide_codigo_postal` sin CP, y `si`/`no` con un ?codigo_postal válido.
codigo_postal con formato inválido (debe ser de 4-5 dígitos).
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso o scope `carrito` insuficiente.
Límite de peticiones excedido.
Error interno.
Sucursales
BearerLista las sucursales de Syscom en México, con su nombre e identificador.
curl 'https://developers.syscom.mx/api/v1/sucursales' \
-H 'Authorization: Bearer TU_TOKEN'Códigos de estado
Lista de sucursales.
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso (gate de distribuidor).
Límite de peticiones excedido.
Error interno.
Países
Bearerscope: carritoPaíses disponibles para las direcciones de envío.
curl 'https://developers.syscom.mx/api/v1/carrito/paises' \
-H 'Authorization: Bearer TU_TOKEN'Códigos de estado
Catálogo de países.
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso o scope `carrito` insuficiente.
Límite de peticiones excedido.
Error interno.
Estado por código postal
Bearerscope: carritoDevuelve el estado y el municipio que corresponden a un código postal.
curl 'https://developers.syscom.mx/api/v1/carrito/estados/31000' \
-H 'Authorization: Bearer TU_TOKEN'Parámetros
cpstringrequeridoCódigo postal (4-5 dígitos).
Códigos de estado
Estado/municipio del código postal.
Código postal inválido (no 4-5 dígitos).
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso o scope `carrito` insuficiente.
Límite de peticiones excedido.
Error interno.
Colonias por código postal
Bearerscope: carritoLista las colonias de un código postal.
curl 'https://developers.syscom.mx/api/v1/carrito/colonias/31000' \
-H 'Authorization: Bearer TU_TOKEN'Parámetros
cpstringrequeridoCódigo postal (4-5 dígitos).
Códigos de estado
Colonias del código postal.
Código postal inválido (no 4-5 dígitos).
Token ausente, inválido, expirado o revocado.
Cuenta sin acceso o scope `carrito` insuficiente.
Límite de peticiones excedido.
Error interno.