Packs y un escaparate común para productos
Los packs tienen su propia API con imágenes y vista de escaparate, los productos se pueden publicar en la web con precio con y sin IVA, y las facturas admiten líneas de pack con el precio cobrado.
Los packs y el escaparate web ya forman parte del contrato público. Están disponibles en todos los planes que incluyen productos, desde Esencial. Esencial admite hasta 5 packs sin archivar por cuenta y el resto de planes no tiene tope.
- Los packs tienen su propio recurso: composición, precio, disponibilidad,
imágenes (hasta 5, con URL públicas y permanentes),
view=storefrontpara webs, lecturas condicionales conETagy un desglose de precio por tarifa, cliente (client_id), fecha ychannel. - Los productos comparten el contrato de escaparate:
channels.web,slug,summary,seo,sale_price{net, tax, gross},availabilityyalt,widthyheightde las imágenes. Una operación masiva publica o retira hasta 50 productos. - Las líneas de documento admiten
{pack_id, quantity, sold_on, unit_price, prices_include_tax, print_mode}. Una venta web cobrada se factura con el precio cobrado, al céntimo, aunque el pack se haya archivado después. - Un pack se imprime igual en todos los documentos: cada producto en su línea,
con el nombre del pack, y el ahorro bajo la última.
print_modesolo admitefull_breakdown. - Las líneas de producto con
unit_priceadmitenprices_include_taxpor línea. - Los webhooks añaden
pack.created,pack.updated,pack.archived,pack.restored,pack.deletedyproduct.deleted.
Lee Packs y Tu tienda con Factuarea.
Eventos
| Evento | Cambio |
|---|---|
pack.created, pack.updated, pack.archived y pack.restored | Nuevos, con el pack en view=all |
pack.deleted | Nuevo, con {id, object: "pack", deleted: true} |
product.deleted | Nuevo, con {id, object: "product", deleted: true} |
product.updated | También al activar o desactivar un producto, y cuando cambian su galería, contenido, slug, canal web, variantes o estado de disponibilidad |
Errores nuevos: pack_not_found, slug_already_exists, pack_in_use,
pack_composition_too_small, invalid_pack_component,
duplicate_pack_component, invalid_pack_pricing, pack_price_unreachable,
pack_price_allocation_impossible, invalid_pack_status_transition,
pack_not_sellable, pack_image_limit_reached, pack_snapshot_invalid,
pack_lines_must_be_expanded, pack_line_locked y
pack_print_mode_not_allowed.
Contrato al día
Esta publicación también recoge los cambios finales del contrato de packs, ofertas y tarifas. Las operaciones afectadas figuran en la lista de abajo.
- Packs.
sellable.codees un código estable y nullable (archived,inactive,out_of_window,no_channel,component_unsellableoprice_unreachable) ynullcuando el pack se puede vender. Modificar o borrar las imágenes de un pack de otra empresa responde 404pack_not_found. - Tarifas. Actualizar, eliminar o tocar los ítems de una tarifa de otra empresa responde 404
price_list_not_found. Eliminar un ítem inexistente responde el nuevo 404price_list_item_not_found, conparamitem_id. Los errores de dominioduplicate_price_list_name,invalid_price_list_item,inactive_price_listyprice_list_in_usellevan sucodey suparam. - Idempotencia. Las escrituras de packs, ofertas y tarifas (19 escrituras) responden 409
idempotency_key_in_usemientras otra petición con la mismaIdempotency-Keysigue en curso. Reintenta pasados unos segundos con la misma clave y el mismo cuerpo. - Productos. Un filtro
price[gte],price[lte]y similares con un valor no numérico responde 400parameter_invalid_format, conparam. - Tope del plan. En el plan Esencial una cuenta admite hasta 5 packs sin archivar, activos o inactivos, entre todas sus empresas.
POST /v1/companies/{company}/packsyPOST /v1/companies/{company}/packs/{pack}/restoreresponden 402plan_limit_exceededcondetails.resourcepacks,currentylimitcuando la cuenta está llena, y no guardan nada. Archiva o borra un pack para liberar una plaza, o amplía el plan. El resto de planes no tiene tope. - Módulos. Los recursos
packsypromotionsde la v1 exigen el móduloproductsen cada petición y responden 403feature_not_available_in_plansi falta.productsyprice-listsresponden como hasta ahora. Una línea de pack porpack_iden un documento exige el módulopacks. - Ofertas. El
labeladmite como máximo 24 caracteres. - Documentos. Los ejemplos de línea incluyen
pack_group: null.
Nuevos endpoints12
| Endpoint | Descripción |
|---|---|
GET/v1/companies/{company}/packs | Listar todos los packs |
POST/v1/companies/{company}/packs | Crear un pack |
GET/v1/companies/{company}/packs/{pack} | Consultar un pack |
PATCH/v1/companies/{company}/packs/{pack} | Actualizar un pack |
DEL/v1/companies/{company}/packs/{pack} | Eliminar un pack |
POST/v1/companies/{company}/packs/{pack}/archive | Archivar un pack |
POST/v1/companies/{company}/packs/{pack}/restore | Restaurar un pack |
GET/v1/companies/{company}/packs/{pack}/price-breakdown | Obtener el desglose de precio de un pack |
POST/v1/companies/{company}/packs/{pack}/images | Subir una imagen a un pack |
PATCH/v1/companies/{company}/packs/{pack}/images/{image} | Actualizar una imagen de un pack |
DEL/v1/companies/{company}/packs/{pack}/images/{image} | Eliminar una imagen de un pack |
POST/v1/companies/{company}/products/bulk-channels | Publicar o retirar productos de la web en bloque |