Catálogo de productos
Un catálogo opcional de productos que se vincula automáticamente a los artículos de tus órdenes.
El catálogo de productos es opcional. Los artículos de una orden funcionan inline sin configurar nada. Si vendes los mismos productos una y otra vez, el catálogo te ahorra repetir nombre, precio, peso y datos aduanales: se copian solos a cada orden.
Endpoints
| Método | Ruta | Alcance | Descripción |
|---|---|---|---|
POST |
/v1/products |
products:write |
Crear un producto |
GET |
/v1/products |
products:read |
Listar productos activos (?sku= exacto, ?search= contiene, ?page=, ?limit=) |
GET |
/v1/products/all |
products:read (ADMIN) |
Listar todos, incluidos inactivos |
GET |
/v1/products/:id |
products:read |
Obtener un producto |
PUT |
/v1/products/:id |
products:write |
Actualizar un producto |
DELETE |
/v1/products/:id |
products:write (ADMIN) |
Eliminar (borrado suave) |
Crea un producto
Parámetros del cuerpo
namestring
Nombre del producto.
stringsku?string
Único entre tus productos no eliminados. Habilita el auto-vínculo por SKU.
stringdescription?string
Descripción del producto.
stringprice?number
Precio por unidad; se copia al artículo de la orden al vincular.
numbercurrency?string
stringMXNweight?number
Peso en kg. Es el valor por defecto para empacar y cotizar.
numberlength?number
Largo en cm.
numberwidth?number
Ancho en cm.
numberheight?number
Alto en cm.
numberhsCode?string
Fracción arancelaria (envíos internacionales).
stringsatProductClassCode?string
Clave de clasificación del producto ante el SAT.
stringcountryOfOrigin?string
País de origen (ISO).
stringcustomsDescription?string
Descripción para aduana.
stringdeclaredValue?number
Valor declarado por unidad (seguro y aduanas).
numberdeclaredValueCurrency?string
stringMXNshipsSeparately?boolean
El producto siempre viaja en su propio paquete.
booleanfalseimageUrl?string
URL de la imagen del producto.
stringisActive?boolean
Los inactivos no se listan por defecto y nunca se auto-vinculan.
booleantruemetadata?objeto
Pares llave-valor tuyos; se devuelven tal cual.
objetocurl -X POST https://api.sendit.mx/v1/products \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"sku": "TSHIRT-L-ROJO",
"name": "Playera roja talla L",
"description": "Playera 100% algodón, cuello redondo",
"price": 450.00,
"weight": 0.25,
"length": 30, "width": 25, "height": 3,
"hsCode": "610910",
"satProductClassCode": "53102002",
"countryOfOrigin": "MX",
"declaredValue": 450.00
}'
{
"success": true,
"data": {
"id": "prod_x1y2z3",
"sku": "TSHIRT-L-ROJO",
"name": "Playera roja talla L",
"description": "Playera 100% algodón, cuello redondo",
"price": 450.00,
"currency": "MXN",
"weight": 0.25,
"length": 30,
"width": 25,
"height": 3,
"hsCode": "610910",
"satProductClassCode": "53102002",
"countryOfOrigin": "MX",
"declaredValue": 450.00,
"declaredValueCurrency": "MXN",
"shipsSeparately": false,
"isActive": true,
"createdAt": "2026-07-18T10:00:00.000Z"
}
}
Cómo se vincula con las órdenes
Al crear una orden, cada artículo puede referenciar el catálogo:
- Por
productId. Es el vínculo explícito. Los datos del producto se congelan en el artículo. - Por
sku. Si el SKU coincide con un producto activo, se vincula solo. - Sin vínculo. El artículo vive inline con sus propios datos.
En todos los casos, lo que queda en la orden es un snapshot: editar o borrar el producto después no toca ninguna orden existente.
Lo que se congela en el artículo es: name, price (como unitPrice), sku, weight, hsCode, satProductClassCode, countryOfOrigin, customsDescription y declaredValue.
Reglas del SKU
El sku es único entre tus productos no eliminados. Un producto inactivo sigue ocupando su SKU.
| Código | Cuándo | Cómo resolverlo |
|---|---|---|
400 SKU_ALREADY_EXISTS |
Creas o actualizas un producto con un SKU que ya usa otro | El productId en conflicto viene en details; usa otro SKU o edita ese producto |
Al eliminar un producto (borrado suave), su SKU queda libre para reutilizarse.
El catálogo no separa modos
Los productos no están divididos entre producción y prueba. Tus órdenes LIVE y TEST apuntan al mismo catálogo, y una llave sk_test_ ve exactamente los mismos productos.