add.js.
Leer el carrito
id, variant_id, quantity, title, variant_title, sku, price, line_price, final_line_price, image, url y available. image es la primera imagen de la variante o, si no tiene, la portada del producto.
Escribir en el carrito
Los cuatro endpoints de escritura aceptan JSON (o form-encoded) y responden con el carrito completo:422 con { status, message, description }.
Las cantidades aterrizan en la regla de la variante (quantity_rule, ver JSON de producto) antes de guardarse, así que la respuesta trae la cantidad que quedó y no la enviada. add.js redondea la línea resultante hacia arriba: agregar 1 de una variante que se vende en cajas de 12 deja la línea en 12. change.js y update.js llevan la cantidad enviada al múltiplo más cercano (los empates suben), sin importar cuánto tenía la línea: repetir la misma petición deja la misma cantidad. Por debajo de min la línea cae en min; solo la cantidad 0 la elimina. Ambas acotan entre min y max. El stock nunca entra en ese ajuste: una cantidad por encima del disponible responde 422.
Después de cada escritura exitosa, anuncia el cambio al resto del tema:
Secciones re-renderizadas en la misma respuesta
Igual que en Shopify, las escrituras aceptan un parámetrosections para que la respuesta incluya el HTML actualizado de las secciones que nombres — un solo round-trip actualiza estado y DOM:
sections_url es la ruta contra la que se renderizan (por defecto /cart). Cada fragmento llega con su wrapper riqra-section-{id} incluido: reemplaza el nodo completo.
Section Rendering API
Fuera de las escrituras de carrito,GET /api/sections re-renderiza secciones de cualquier ruta con superficie de tema — filtros de colección, mini-carrito, etc.:
A diferencia de Shopify,
?sections= no se intercepta sobre las URLs de página: usa siempre este endpoint.riqra:section:load sobre el nodo nuevo para que los scripts que escuchan ese evento se re-inicialicen (los custom elements se re-montan solos):
Eventos del tema
Origin resume el patrón completo — un snapshot compartido del carrito, invalidado por el evento:
JSON de producto
Para pickers de variantes o vistas rápidas:compare_at_price mayor que price es la señal de oferta — los badges de descuento se derivan de esa comparación, no de un objeto de promociones.
Cada variante trae quantity_rule con la forma de Shopify: { min, max, increment }. Las cantidades válidas son los múltiplos de increment entre min y max; max es null cuando no hay tope. Una variante sin regla trae { min: 1, max: null, increment: 1 }.
Cada variante trae también images y featured_image: sus propias imágenes o, si no tiene, las del producto. images del producto no incluye las de las variantes.