Tema
Crea un pedido (venta local)
POST
/orders
Consume cupo de venta local y cobra excedente igual que el panel. Los totales se
recalculan en el servidor (total = Σ price × quantity - discount + shipping_cost); el
precio lo manda el socio. discount (opcional) es el descuento total del pedido en monto
y no puede superar total_products. Lo que no se puede resolver (comuna, horario, fecha) no falla: el
pedido se crea y la respuesta lleva warnings. Reintento con el mismo external_id
→ 200 con el pedido existente. Requiere además que la florería tenga habilitado el
ingreso de ventas locales.
customer.email, customer.phone y shipping_cost son obligatorios (shipping_cost
mínimo 0; 0 es válido). Un producto que la florería revende (shared: true) queda
vinculado al compartido y su stock se mueve igual que en el checkout web.
Orden de validación: scope → body (400) → idempotencia (200) → zona/horario/productos
(400) → bloqueo por excedente (422, no se crea nada).
Autorizaciones
bearerAuth
API key de la florería, con formato rf_live_<prefix>_<secreto>. Se entrega una sola
vez; se envía en cada solicitud como Authorization: Bearer <key>.
Tipo
HTTP (bearer)
Parámetros
Header Parameters
Idempotency-Key
Texto único de hasta 255 caracteres. Durante 24 h, la misma key con el mismo cuerpo
devuelve la misma respuesta sin crear nada; con otro cuerpo, 409
idempotency_conflict. Solo se recuerdan las respuestas 2xx. Un header vacío
se trata como si no viniera.
Tipo
string
Longitud máx.
255Cuerpo de la petición
application/json
JSON "external_id": "string", "external_url": "string", "customer": { "name": "string", "email": "string", "phone": "string", "phone_code": "56" }, "address": { "zone_text": "string", "zone_id": 0, "type": "DrParticular", "name": "string", "street": "string", "street_number": "string", "more_info": "string", "phone": "string", "latitude": 0, "longitude": 0 }, "shipping_date": "string", "shipping_schedule_id": 0, "schedule_text": "string", "shipping_cost": 0, "discount": 0, "card_message": "string", "anonymous": false, "document_type": "boleta", "products": [ { "product_id": 0, "variant_id": 0, "options": [ ], "name": "string", "quantity": 0, "price": 0, "note": "string" } ]
{
}
Respuestas
Reintento: ya existía un pedido con ese external_id (created: false), o
repetición de una Idempotency-Key (header Idempotent-Replayed: true, misma
respuesta que la original).
application/json
JSON "error": false, "created": true, "order": { "id": 0, "external_id": "string", "external_url": "string", "status": { "slug": "string", "name": "string" }, "is_internal": true, "created_by_api": true, "secure_key": "string", "status_url": "string", "shipping_date": "string", "schedule_id": 0, "schedule_text": "string", "zone_id": 0, "zone_text": "string", "customer": { "name": "string", "email": "string", "phone_code": "string", "phone": "string" }, "address": { "type": "string", "name": "string", "street": "string", "street_number": "string", "more_info": "string", "phone": "string", "latitude": 0, "longitude": 0 }, "card_message": "string", "anonymous": true, "total_products": 0, "total_shipping": 0, "total_discount": 0, "total": 0, "delivered_at": "string", "created_at": "string", "updated_at": "string", "warnings": [ { "code": "string", "message": "string", "reason": "string" } ], "url_photo": "string", "photos": { "xs": "string", "md": "string", "lg": "string" }, "products": [ { "id": 0, "product_id": 0, "variant_id": 0, "shared": true, "name": "string", "quantity": 0, "price": 0, "note": "string", "options": [ { "id": 0, "name": "string", "quantity": 0, "price": 0 } ] } ], "history": [ { "status": "string", "status_name": "string", "message": "string", "created_at": "string" } ], "document_type": "string", "document": { "number": "string", "date": "string", "file_url": "string", "page_url": "string", "validation": "string" } }
{
}
POST
/orders