Tema
Lo que sorprende
Comportamientos de la API que conviene conocer antes de mandar pedidos reales.
Los totales los calcula Redfloral
total_products = Σ price × quantity y total = total_products - discount + shipping_cost. Si mandas totales, se ignoran. Compara los de la respuesta con los tuyos para conciliar.
El precio lo mandas tú
El price de cada línea es lo que le cobraste a tu cliente: no se reemplaza por el del catálogo. price: 0 se acepta (regalo). Las excepciones son los productos con variantes y los productos por unidad, más abajo.
Descuentos
Si le hiciste un descuento a tu cliente (cupón de tu tienda, promoción), manda el precio de lista en cada línea y el monto total rebajado en discount. Así el total de la página de seguimiento y del email coincide con lo que cobraste, y el descuento aparece como tal.
- Es un monto en pesos, no un porcentaje ni un código de cupón.
- Se resta de los productos, no del despacho. Para envío gratis manda
shipping_cost: 0. - Vuelve en la respuesta como
total_discount. - Si es negativo o mayor que
total_products, el pedido no se crea:400con el motivo enfields.discount. - No cambia lo que Redfloral le cobra a la florería por el pedido.
Productos libres
Una línea sin product_id y con name se acepta: sirve para lo que vendes y no está en tu catálogo de Redfloral. No descuenta stock ni aparece en tus estadísticas por producto, así que usa product_id cuando lo tengas. variant_id solo se acepta junto a product_id.
Productos con variantes (type: 3)
La línea debe traer la variante que eligió tu cliente:
json
{ "product_id": 8893, "variant_id": 51, "quantity": 1 }Los id y atributos de cada variante están en GET /products/<id>, y el precio de cada fecha en GET /products/prices. En estas líneas el precio lo calcula Redfloral: el de la variante para la fecha de despacho, con el recargo de alta demanda. Si mandas price, se ignora; compara el de la respuesta con lo que cobraste.
- Si falta
variant_id, la variante no es de ese producto o no tiene precio, el pedido no se crea:400con el motivo enfields["products.N.variant_id"]. - Si lo que falta es stock, el pedido se crea igual (ya cobraste) con el aviso
variant_stock_insufficient. Avísale a la florería.
Productos por unidad (type: 2)
La línea debe traer las opciones que eligió tu cliente:
json
{ "product_id": 8892, "quantity": 1, "options": [{ "id": 501, "quantity": 10 }] }Los id y los límites (personalized_min, personalized_max, personalized_max_combinations) están en GET /products/<id>, y el precio por opción de cada fecha en GET /products/prices. El precio lo calcula Redfloral: la suma de quantity × precio de cada opción para la fecha de despacho, con el recargo de alta demanda.
- Si falta
options, una opción no existe o está inactiva, o no se cumplen los límites, el pedido no se crea:400con el motivo enfields["products.N.options"]. - Si lo que falta es stock, el pedido se crea igual con el aviso
options_stock_insufficient. Avísale a la florería, que puede tener que reemplazar esas opciones.
La comuna se resuelve por texto exacto
Sin importar mayúsculas ni acentos: "NUÑOA" = "Ñuñoa" = "nunoa". Pero "Santiago" no coincide con "Santiago Centro": preferimos dejar la zona vacía antes que asignar una equivocada.
- Si mandas
zone_id, ese manda (y debe ser una comuna activa de tu florería, si no400). - Si el texto no coincide, el pedido se crea igual, sin zona, con el aviso
zone_not_matched. La florería lo corrige en el panel, pero mientras no tenga zona no entra bien en las rutas ni en los reportes por comuna. Para evitarlo, mapea tus comunas conGET /zonesy mandazone_id.
Horarios
Manda el shipping_schedule_id que te dio delivery-availability. Si prefieres texto, schedule_text debe ser exacto ("10:00 - 14:00"); si no coincide con un horario real, el pedido se crea con el aviso schedule_not_matched y sin horario, y no entra bien en la armada de rutas.
Fecha no disponible
Si la comuna y el horario son reales pero Redfloral no despacha ese día, el pedido también se crea (ya cobraste) con el aviso date_not_available y un reason. Consulta delivery-availability antes de dejar que tu cliente elija la fecha.
Notificaciones al cliente
Por defecto Redfloral no le manda email ni WhatsApp a tu cliente: es tu cliente. Si quieres que lo haga, actívalo en la key desde Integraciones.
Estados
Solo Redfloral y la florería avanzan los estados (processing → in_transit → delivered…); tú los lees. El pedido creado por la API nace en processing.
Es una venta local
El pedido aparece en tu panel como cualquier venta local cargada a mano, con ruta, estados, foto de entrega y liquidación, marcado como "pedido por API". Cuenta para tu cupo de ventas locales: ver Cupo y excedente.
Zona horaria
updated_since sin zona se interpreta en hora de Chile (America/Santiago). Envía siempre ISO 8601 con zona: 2026-10-23T12:00:00-03:00.
Campos nuevos
Los campos desconocidos que mandes se ignoran, y la API puede agregar campos nuevos a las respuestas. Tu integración no debe romperse por un campo que no conoce.