Este endpoint te permite crear un pedido manualmente desde tu sistema. Úsalo cuando necesites capturar ventas que no provienen de un canal conectado, por ejemplo:
El pedido se crea en estado pending y entra al flujo normal de aceptación, preparación y envío.
Pedidos desde canales
Si el pedido ya existe en un canal conectado (Shopify, Amazon, MercadoLibre…), no lo crees manualmente. Fenicia lo sincroniza automáticamente vía webhooks. Crear pedidos duplicados genera inconsistencias de inventario.
Crea un nuevo pedido manual en el tenant autenticado
Permiso requerido: orders:create
items[] (requerido)Cada línea del pedido debe incluir:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sku | string | Sí | SKU del producto. Debe existir en tu catálogo. |
quantity | number | Sí | Cantidad vendida. Mayor a 0. |
unitPrice | number | Sí | Precio unitario sin impuestos. |
discount | number | No | Descuento en valor absoluto sobre la línea. |
taxable | boolean | No | Si aplica impuestos. Default: true. |
customerInfo (requerido)| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
firstName | string | Sí | Nombre del cliente. |
lastName | string | Sí | Apellido del cliente. |
email | string | Sí | Email válido. Se usa para notificaciones. |
phone | string | No | Teléfono con código de país. |
customerId | string | No | ID de un cliente existente en tu CRM. Si se omite, se crea uno nuevo. |
deliveryInfo| Campo | Tipo | Descripción |
|---|---|---|
address | object | Dirección de entrega. |
method | string | Método: standard, express, pickup. |
carrier | string | Paquetería: dhl, fedex, estafeta, etc. |
trackingNumber | string | Guía si ya fue embarcado fuera de Fenicia. |
curl -X POST https://api.fenicia.io/orders \
-H "Authorization: Bearer fn_live_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "sku": "CAM-ROJO-M", "quantity": 2, "unitPrice": 499.00 },
{ "sku": "PAN-AZUL-32", "quantity": 1, "unitPrice": 899.50, "discount": 100 }
],
"customerInfo": {
"firstName": "María",
"lastName": "González",
"email": "maria.gonzalez@example.com",
"phone": "+525512345678"
},
"shippingAddress": {
"street": "Av. Reforma 123",
"city": "Ciudad de México",
"state": "CDMX",
"zipCode": "06600",
"country": "MX"
},
"deliveryInfo": { "method": "express", "carrier": "dhl" },
"paymentStatus": "paid",
"tags": ["telefono", "vip"],
"notes": "Cliente pidió empaque de regalo"
}'{
"_id": "65f3a1b2c4d5e6f7a8b9c0d1",
"externalId": "FEN-10042",
"tenantId": "69db07c8bce4d49b18c42a49",
"channelId": "manual",
"orderStatus": "pending",
"paymentStatus": "paid",
"currency": "MXN",
"subtotal": 1798.50,
"discount": 100.00,
"tax": 287.76,
"total": 1986.26,
"items": [
{
"sku": "CAM-ROJO-M",
"quantity": 2,
"unitPrice": 499.00,
"lineTotal": 998.00
},
{
"sku": "PAN-AZUL-32",
"quantity": 1,
"unitPrice": 899.50,
"discount": 100.00,
"lineTotal": 799.50
}
],
"customerInfo": {
"customerId": "65f3a1b2c4d5e6f7a8b9c0d2",
"firstName": "María",
"lastName": "González",
"email": "maria.gonzalez@example.com",
"phone": "+525512345678"
},
"shippingAddress": {
"street": "Av. Reforma 123",
"city": "Ciudad de México",
"state": "CDMX",
"zipCode": "06600",
"country": "MX"
},
"deliveryInfo": { "method": "express", "carrier": "dhl" },
"tags": ["telefono", "vip"],
"notes": "Cliente pidió empaque de regalo",
"orderCreated": "2026-04-11T14:23:11.000Z",
"updatedAt": "2026-04-11T14:23:11.000Z"
}Tip
Guarda el _id devuelto. Lo necesitarás para consultar, actualizar o avanzar el pedido en las siguientes llamadas.
| Código | Status | Descripción |
|---|---|---|
VALIDATION_ERROR | 400 | Faltan campos obligatorios o tienen formato inválido. |
SKU_NOT_FOUND | 400 | Algún SKU del array items no existe en tu catálogo. |
INSUFFICIENT_INVENTORY | 409 | No hay stock suficiente para alguno de los items. |
INSUFFICIENT_PERMISSIONS | 403 | La API key no tiene el scope orders:create. |
INVALID_API_KEY | 401 | La API key es inválida o fue revocada. |