Tema
Pedidos
Crear un pedido
bash
curl -X POST "$API/orders" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: WC-10452-1" \
-d '{
"external_id": "WC-10452",
"external_url": "https://mitienda.cl/wp-admin/post.php?post=10452",
"customer": {"name": "Ana Pérez", "email": "ana@correo.cl", "phone": "912345678", "phone_code": "56"},
"address": {
"zone_text": "Ñuñoa", "zone_id": 12,
"name": "María González", "street": "Los Aromos", "street_number": "1234",
"more_info": "Depto 501", "phone": "987654321"
},
"shipping_date": "2026-11-02",
"shipping_schedule_id": 7,
"shipping_cost": 3990,
"discount": 2000,
"card_message": "Feliz cumpleaños",
"anonymous": false,
"document_type": "boleta",
"products": [
{"product_id": 8891, "quantity": 1, "price": 29990},
{"name": "Globo personalizado", "quantity": 1, "price": 5990}
]
}'Respuesta 201:
json
{ "error": false, "created": true,
"order": { "id": 70123, "external_id": "WC-10452",
"status": { "slug": "processing", "name": "Aceptado" },
"status_url": "https://redfloral.cl/estado-del-pedido/…",
"zone_id": 12, "zone_text": "Ñuñoa", "schedule_id": 31,
"total_products": 35980, "total_shipping": 3990, "total_discount": 2000,
"total": 37970, "warnings": [], "...": "..." } }status_url es la página pública de seguimiento: puedes mandársela a tu cliente.
Campos
| Campo | Obligatorio | Notas |
|---|---|---|
external_id | Sí | Tu número de pedido. Único por florería (ver Reintentos) |
external_url | No | Enlace al pedido en tu sistema; la florería lo ve en el panel |
customer | Sí | name, email y phone. Si el teléfono trae el código pegado (+56 9…), se separa |
address | Sí | zone_text, name, street, street_number. zone_id, more_info, phone, latitude, longitude son opcionales |
shipping_date | Sí | YYYY-MM-DD |
shipping_schedule_id o schedule_text | Uno de los dos | El id de delivery-availability, o el texto exacto "10:00 - 14:00" |
shipping_cost | Sí | Entero ≥ 0. Manda 0 si no cobraste despacho, pero no lo omitas |
products | Sí, al menos uno | product_id o name, quantity, price. Ver Lo que sorprende para variantes y productos por unidad |
discount | No | Monto total rebajado (ver Descuentos) |
card_message | No | Mensaje de la tarjeta |
anonymous | No | true si tu cliente pidió envío anónimo: la florería no le dice al destinatario quién lo envía |
document_type | No | boleta (por defecto) o factura: el documento tributario que emites |
El esquema completo, con todos los campos y ejemplos, está en la referencia de POST /orders.
Reintentos
external_id es único por florería. Si repites el POST con el mismo external_id (por ejemplo, tras un corte de red), no se duplica: recibes 200 con "created": false y el pedido que ya existe. Puedes reintentar con tranquilidad.
Además puedes mandar el header Idempotency-Key: <texto único, hasta 255 caracteres>. Durante 24 horas, repetir la misma key con el mismo cuerpo devuelve exactamente la misma respuesta, con el header Idempotent-Replayed: true, sin crear nada. La misma key con otro cuerpo responde 409 idempotency_conflict. Solo se recuerdan las respuestas exitosas: si falló con 400 o 422, puedes corregir y reintentar con la misma key. Un header vacío se ignora.
Avisos (warnings)
Hay datos que no impiden crear el pedido, porque tu cliente ya pagó, pero que la florería tiene que revisar. Vienen en warnings con un code:
code | Cuándo |
|---|---|
zone_not_matched | La comuna no coincidió con ninguna de la florería: el pedido queda sin zona |
schedule_not_matched | El schedule_text no coincidió con un horario real |
date_not_available | Redfloral no despacha esa fecha a esa comuna u horario; trae un reason |
variant_stock_insufficient | Falta stock de la variante pedida |
options_stock_insufficient | Falta stock de alguna opción de un producto por unidad |
Muéstralos a tu operador para que avise a la florería. zone_not_matched y schedule_not_matched desaparecen cuando la florería asigna la zona u horario en el panel. En el panel, estos pedidos aparecen marcados como "pedido por API" con los mismos avisos.
Cancelar
POST /orders/<id>/cancel (o /orders/ext:WC-10452/cancel). Solo pedidos creados por la API que sigan en pending o processing; si no, 409 order_not_cancellable. Devuelve el stock de los productos que lo controlan y el de las opciones de los productos por unidad. No devuelve el cargo de excedente (Cupo y excedente).
Subir la boleta o factura
POST /orders/<id>/document con multipart/form-data, no JSON:
bash
curl -X POST "$API/orders/70123/document" \
-H "Authorization: Bearer $KEY" \
-F file=@boleta-1234.pdf -F number=1234 -F date=2026-11-05file(PDF, JPG o PNG, hasta 10 MB),number(folio) ydate(fecha de emisión) son obligatorios. Volver a subir reemplaza el documento.- Sirve para cualquier pedido de tu florería, también los que llegan desde Redfloral, que necesitan el documento para liquidarse.
- El tipo es el
document_typedel pedido. Si subes otro tipo, manda-F document_type=factura(oboleta) y el pedido queda con ese tipo. - Un folio no se puede repetir en otro pedido de tu florería con el mismo tipo:
409 duplicate_documentcon elorder_iddel pedido que ya lo tiene. - Redfloral revisa el documento (folio, monto y RUT emisor) en segundo plano: la respuesta trae
document.validation: "pending"y el resultado aparece después enGET /orders/<id>(valid,partially_valid,invalid,unreadable,error,unsupported_format). - El cliente recibe el documento por email si mandas
-F notify_customer=true; confalse, no. Sin el campo decide la configuración de tu key, que por defecto no envía.