Pedidos
Rutas
| Método | Ruta | Permiso | Desde |
|---|---|---|---|
| GET | /orders | Gestión o tienda | 1.3.0 |
| POST | /orders | Sesión iniciada | 1.10.0 |
| GET | /orders/{id}/status | Dueño del pedido o gestión | 1.10.0 |
| PUT, PATCH | /orders/{id} | Dueño del pedido o gestión | 1.10.0 |
| DELETE | /orders/{id} | Gestión o tienda | 1.11.0 |
| POST | /orders/{id}/minutes | Gestión o tienda | 1.11.0 |
| GET | /orders/reports | Gestión o tienda | 1.11.0 |
| GET | /order-statuses | Sesión iniciada | 1.11.0 |
No existe GET /orders/{id} en notiwoo/v1. Para leer un pedido completo, usa la API de WooCommerce (/wp-json/wc/v3/orders/{id}). Para consultar solo su estado, usa /orders/{id}/status.
Listar pedidos
GET /orders
| Parámetro | Por defecto | Notas |
|---|---|---|
page, per_page | 1, 20 | Máximo 100 por página. |
search | — | Un número de menos de 10 cifras busca por ID exacto. Cualquier otro texto busca en nombre, ciudad, dirección, código postal, teléfono y modalidad. |
status | processing,accepting | Uno o varios estados separados por comas. |
orderby | date | date, id o delivery_time. |
order | desc | asc o desc. |
Los usuarios multistore_user solo ven los pedidos de su tienda.
Cada pedido tiene la estructura de WooCommerce, con estos añadidos:
| Campo | Contenido |
|---|---|
total, subtotal, discount_total | Texto con formato de moneda, por ejemplo "$ 25.000". |
line_items[] | Artículos con precios formateados y los extras elegidos. |
fee_lines[] | Cargos y envíos: {name, total, total_without_tax, tax}. |
order_type_slug, order_type | Modalidad (delivery, pickup) y su nombre. |
status_nice | Estado en el idioma del sitio. |
billing_formatted, shipping_formatted | Direcciones en HTML. |
date_to_deliver, time_to_deliver | Día y hora pedidos por el cliente. |
printed | Si el pedido ya se imprimió. |
service_mode | dine_in (en mesa), takeaway (para llevar) o vacío. |
table | {id, label, zone, released_at} si el pedido es en mesa. |
meta incluye la paginación y statuses, el mapa completo de estados de la tienda.
Crear un pedido
POST /orders crea un pedido en nombre del usuario autenticado. El servidor recalcula todo: precios, extras, tarifa de domicilio, horario y mínimo. Los precios, totales, distancias o gastos de envío que envíe el cliente se ignoran.
| Campo | Obligatorio | Notas |
|---|---|---|
line_items[] | Sí | product_id, variation_id, quantity, extra_selections[{category_id, extra_ids[]}] y additional_comments. |
payment_method | Sí | Debe ser un método sin pago en línea activo en la tienda (cod, bacs o cheque). Los pagos con pasarela se hacen en el checkout de la tienda. |
order_type | Recomendado | delivery o pickup. |
fulfillment_date | Según ajustes | AAAA-MM-DD. |
fulfillment_time | Según ajustes | HH:MM, now o asap. |
billing, shipping | No | Direcciones con las claves de WooCommerce. Para comprobar la cobertura se usa shipping, luego billing y luego address. |
address | No | Dirección en texto libre. |
doorbell | No | Apartamento, timbre, indicaciones. |
curl -X POST https://tienda.example.test/wp-json/notiwoo/v1/orders \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{
"order_type": "delivery",
"payment_method": "cod",
"fulfillment_time": "asap",
"shipping": { "address_1": "Calle 10 # 20-30", "city": "Bogotá", "country": "CO" },
"line_items": [
{ "product_id": 120, "quantity": 2,
"extra_selections": [ { "category_id": 18, "extra_ids": [91] } ],
"additional_comments": "Sin cebolla" }
]
}'
{
"success": true,
"data": { "id": 1234, "status": "processing", "message": "Your Order has been accepted", "minutes": "30", "total": "33000.00" }
}
Antes de crear el pedido, valida el carrito con POST /cart/validate para mostrar los errores al cliente.
| Error | HTTP | Causa |
|---|---|---|
notiwoo_cutover_pending | 409 | Modo coexistencia. |
notiwoo_empty_cart | 422 | No hay artículos. |
notiwoo_payment_method_required | 422 | Falta payment_method. |
notiwoo_payment_requires_checkout | 422 | El método exige pasarela en línea. |
notiwoo_payment_method_unavailable | 422 | El método no está activo. |
notiwoo_transaction_id_required | 422 | Falta el ID de la transacción de un pago confirmado. |
notiwoo_cart_invalid | 422 | La validación falló; el detalle está en details.validation. |
notiwoo_product_changed | 409 | Un producto cambió durante la creación. Valida de nuevo. |
notiwoo_order_create_failed | 500 | WooCommerce no pudo crear el pedido. |
Consultar el estado
GET /orders/{id}/status responde { id, status, message, minutes }. minutes es el tiempo estimado. Úsalo para que el cliente consulte periódicamente el estado de su pedido.
Errores: 404 notiwoo_order_not_found, 403 notiwoo_order_forbidden (el pedido es de otro usuario).
Actualizar un pedido
PUT /orders/{id}
| Campo | Cliente (dueño) | Gestión |
|---|---|---|
status | Solo cancelled, y solo si el pedido no está cancelado, completado ni reembolsado. | Cualquier estado. |
minutes | — | Tiempo estimado. |
printed | — | Marca de impresión. |
deliveryboy | — | ID del repartidor. |
transaction_id | — | ID de transacción. |
Responde { id, status, message, updated }. Si el cliente envía un cambio no permitido, se ignora y updated vale false.
Para seguir el flujo de estados de la app, consulta estados del pedido.
Cambiar el tiempo estimado
POST /orders/{id}/minutes con minutes (obligatorio) y notify (por defecto true). Con notify, el cliente recibe un correo con el nuevo tiempo. Responde { id, minutes, message }.
Borrar un pedido
DELETE /orders/{id} elimina el pedido de forma definitiva, sin pasar por la papelera. Para anular una venta, cambia el estado a cancelled.
Reporte de ventas
GET /orders/reports cuenta los pedidos completados en un rango:
| Parámetro | Obligatorio | Notas |
|---|---|---|
date_from, date_to | Sí | Fechas; se admite / como separador. |
deliveryboy | No | ID del repartidor o all. |
payment_method | No | ID del método o all. |
Responde { date_from, date_to, delivery_name, count, total, total_html }. Si las fechas no son válidas, responde 422 notiwoo_invalid_dates.
Estados disponibles
GET /order-statuses responde { all, custom }:
all: todos los estados de la tienda.custom: los estados añadidos por Notiwoo y otros plugins (wc-accepted,wc-shipped,wc-finalized…).
Consulta Integración con WooCommerce.