Pedidos manuales
Arma un pedido para un cliente, compártele un enlace de pago y conviértelo en pedido.
Andrea escribe por WhatsApp desde Trujillo y pide dos polos. Armas su pedido con Admin API, le envías un enlace y ella paga en tu tienda.
Requisitos
- Un token de Admin con los permisos
draft:create,draft:readydraft:updateenECOMIQ_TOKEN. Para registrar un pago, tambiénorder:updateypayment:create. Ver Inicio rápido. - La ruta
/en tu tienda. Los temas de Ecomiq ya la traen. En una tienda headless, la creas tú.drafts/ {shareToken} - Node.js o Python con
requests, para los ejemplos.
Crea el borrador
Un pedido manual empieza como borrador. Envía la moneda y los datos del cliente.
curl -X POST https://api.ecomiq.pe/api/v1/order-drafts \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"currencyCode": "PEN",
"email": "andrea.ramos@example.com",
"firstName": "Andrea",
"lastName": "Ramos",
"phone": "+51987654321",
"source": "whatsapp"
}'Responde 201 con el id del borrador. Los pasos siguientes reutilizan
ADMIN, headers y HEADERS.
- Sin
customerId, envíaemail,firstNameylastName. Con él, el borrador copia los datos del cliente y su dirección principal. - El borrador nace en
drafty recibe un número de la tienda:D1,D2… GET /ordena porv1/ order-drafts draftDatedescendente. Cambia el orden consortBy(draftDate,draftNumber,total,createdOnoupdatedOn) ysortDirection(ascodesc).
Agrega los productos
Agrega una variante del catálogo con su cantidad. discount es el descuento de
toda la línea, en negativo, o 0 sin descuento. shipping suma el envío de
cada línea y el de los métodos de envío seleccionados.
curl -X POST https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769/items \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"kind": "catalogVariant",
"variantId": "7204558912004321180",
"quantity": 2,
"discount": -20
}'{
"items": [
{
"id": "7204558912004323771",
"title": "Polo de algodón",
"quantity": 2,
"discount": -20.0,
"total": 158.0
}
],
"tax": 24.1,
"total": 158.0
}unitPricecambia el precio solo en este borrador. Para algo fuera del catálogo, usa"kind": "custom"contitleyunitPrice.- El impuesto de los productos del catálogo se calcula solo.
- Cambia una línea con
PATCH /. Conv1/ order-drafts/ {draftId}/ items/ {itemId} quantity: 0o conDELETE, la quitas.
Agrega la dirección y el envío
Envía la dirección de envío. PATCH solo cambia lo que envías.
curl -X PATCH https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769 \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"shippingAddress": {
"name": "Andrea Ramos",
"address1": "Av. España 1520",
"city": "Trujillo",
"countryCode": "PE"
}
}'Luego pide las opciones de envío para esa dirección.
curl https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769/shipping-options \
-H "Authorization: Bearer $ECOMIQ_TOKEN"Cada opción trae displayName, price, shippingMethodId, target,
targetId y rateId. Asigna una con esos cuatro últimos valores; el borrador
queda con shipping: 12 y total: 170.
curl -X PUT https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769/shipping-method \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "shippingMethodId": "7204558912004328810", "target": "automatic" }'- Envía
billingAddressigual: convertir exige las dos, cada una conname,address1,cityycountryCode. - Si cambias la dirección de envío o los productos, vuelve a asignar el envío.
DELETE /lo quita.v1/ order-drafts/ {draftId}/ shipping-method - Con varios vendedores o perfiles de envío, cada grupo lleva su envío: indica
sellerIdoshippingProfileId.
Comparte el enlace de pago
Crea el enlace y envíaselo al cliente por WhatsApp. shareExpiresAt es
opcional y debe ser futuro; sin él, el enlace no vence.
curl -X POST https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769/share \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "shareExpiresAt": "2026-10-09T05:00:00Z" }'{
"shareToken": "Jm2xQ9vT4pLk8sWb1nZr6cYh0uEa3dFg",
"sharePath": "/drafts/Jm2xQ9vT4pLk8sWb1nZr6cYh0uEa3dFg"
}El enlace es el dominio principal de tu tienda más sharePath. Ver
Listar dominios.
- El borrador pasa a
sent. Cada llamada crea un token nuevo y el anterior deja de funcionar. - Con
"allowAnonymousShareAccess": false, el cliente debe iniciar sesión en tu tienda. - Para enviarlo por correo, usa Enviar factura del borrador.
Cobra en tu tienda
En /, tu tienda muestra el borrador con Storefront API. Al
confirmar, lo convierte en pedido.
El GET devuelve lo que ve el comprador: número y estado del borrador, contacto,
direcciones, artículos con shipping, tax y warranty, importes y métodos de
envío con su precio y fechas de entrega. Las notas, etiquetas y metadatos
internos no se incluyen.
curl https://storefront.ecomiq.pe/v1/order-drafts/share/<share-token> \
-H "x-Store-Domain: mi-tienda"
curl -X POST https://storefront.ecomiq.pe/v1/order-drafts/share/<share-token>/checkout \
-H "x-Store-Domain: mi-tienda" \
-H "Content-Type: application/json" \
-d '{ "invoiceType": "ticket" }'El checkout responde orderPaths, con rutas /. Lleva al
cliente allí: paga el saldo como en
Checkout y pago.
- Abrirlo pasa el borrador a
viewed, y el checkout aconverted. Revísalo conGET /o lista los vistos conv1/ order-drafts/ {draftId} GET /.v1/ order-drafts?status=viewed - Si ya se convirtió,
GETresponde conorderPaths: redirige al cliente. - Se crea un pedido por vendedor y perfil de envío, con una ruta cada uno.
O cobra desde el admin
Si el cliente ya pagó por Yape, convierte el borrador tú mismo.
curl -X POST https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769/convert \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "invoiceType": "ticket" }'{
"orderIds": ["7204558912004325350"],
"order": {
"orderNumber": "ORD-2026-0001",
"status": "new",
"financialSummary": { "balanceDue": 170.0 }
}
}Luego registra el pago en cada pedido de orderIds, por su balanceDue.
curl -X POST https://api.ecomiq.pe/api/v1/orders/7204558912004325350/payments \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "method": "yape", "currencyCode": "PEN", "amount": 170,
"reference": "Operación 845120", "idempotencyKey": "D1-yape" }'- Convertir exige artículos, ambas direcciones y un envío por grupo.
- Si el borrador ya se convirtió, responde
200con los mismos pedidos. - Cuando el pago cubre el total, el pedido pasa a
confirmed.
Cancela un borrador
Un borrador no se elimina: se cancela.
curl -X POST https://api.ecomiq.pe/api/v1/order-drafts/7204558912004324769/cancel \
-H "Authorization: Bearer $ECOMIQ_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "reason": "La clienta compró en tienda." }'- El borrador pasa a
cancelledy su enlace deja de funcionar. reasones obligatorio, con un máximo de 500 caracteres. Se guarda encancelReasondel detalle administrativo; las notas del borrador se conservan.- Un borrador
convertedno se cancela: cancela su pedido.
Errores
code | Estado | Qué hacer |
|---|---|---|
Common.Validation | 400 | Revisa errors: falta un campo o no tiene el formato esperado. |
OrderDrafts.NotFound | 404 | El borrador no existe en esta tienda. |
Catalog.VariantUnavailable | 409 | El producto o la variante no está a la venta. |
Catalog.InsufficientStock | 400 | No hay stock para esa cantidad. Bájala. |
ShippingMethods.GroupRequired | 400 | El borrador tiene varios grupos. Envía sellerId o shippingProfileId. |
ShippingMethods.MethodNotAvailable | 400 | El envío ya no aplica. Pide las opciones otra vez. |
OrderDrafts.ShippingAddressRequired | 400 | Agrega la dirección de envío. |
OrderDrafts.BillingAddressRequired | 400 | Agrega la dirección de facturación. |
OrderDrafts.ShippingMethodRequired | 400 | Falta el envío de un grupo. |
OrderDrafts.ShareNotFound | 404 | El token no existe o se reemplazó. Pide el enlace nuevo. |
OrderDrafts.ShareNotAvailable | 404 | El enlace venció, se reemplazó o el borrador se canceló. |
OrderDrafts.AuthenticationRequired | 401 | El enlace exige sesión. Pide al cliente que inicie sesión. |
Common.Conflict | 409 | El borrador ya está converted o cancelled, o no tiene artículos. |
Siguientes pasos
Última actualización: