Skip to content

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": "[email protected]", "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 ​

CampoObligatorioNotas
external_idSíTu número de pedido. Único por florería (ver Reintentos)
external_urlNoEnlace al pedido en tu sistema; la florería lo ve en el panel
customerSíname, email y phone. Si el teléfono trae el código pegado (+56 9…), se separa
addressSízone_text, name, street, street_number. zone_id, more_info, phone, latitude, longitude son opcionales
shipping_dateSíYYYY-MM-DD
shipping_schedule_id o schedule_textUno de los dosEl id de delivery-availability, o el texto exacto "10:00 - 14:00"
shipping_costSíEntero ≥ 0. Manda 0 si no cobraste despacho, pero no lo omitas
productsSí, al menos unoproduct_id o name, quantity, price. Ver Lo que sorprende para variantes y productos por unidad
discountNoMonto total rebajado (ver Descuentos)
card_messageNoMensaje de la tarjeta
anonymousNotrue si tu cliente pidió envío anónimo: la florería no le dice al destinatario quién lo envía
document_typeNoboleta (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:

codeCuándo
zone_not_matchedLa comuna no coincidió con ninguna de la florería: el pedido queda sin zona
schedule_not_matchedEl schedule_text no coincidió con un horario real
date_not_availableRedfloral no despacha esa fecha a esa comuna u horario; trae un reason
variant_stock_insufficientFalta stock de la variante pedida
options_stock_insufficientFalta 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 [email protected] -F number=1234 -F date=2026-11-05
  • file (PDF, JPG o PNG, hasta 10 MB), number (folio) y date (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_type del pedido. Si subes otro tipo, manda -F document_type=factura (o boleta) 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_document con el order_id del 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 en GET /orders/<id> (valid, partially_valid, invalid, unreadable, error, unsupported_format).
  • El cliente recibe el documento por email si mandas -F notify_customer=true; con false, no. Sin el campo decide la configuración de tu key, que por defecto no envía.

API de socios de Redfloral, versión 1 (beta).