Factuarea APIDevelopers
Añadido

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=storefront para webs, lecturas condicionales con ETag y un desglose de precio por tarifa, cliente (client_id), fecha y channel.
  • Los productos comparten el contrato de escaparate: channels.web, slug, summary, seo, sale_price{net, tax, gross}, availability y alt, width y height de 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_mode solo admite full_breakdown.
  • Las líneas de producto con unit_price admiten prices_include_tax por línea.
  • Los webhooks añaden pack.created, pack.updated, pack.archived, pack.restored, pack.deleted y product.deleted.

Lee Packs y Tu tienda con Factuarea.

Eventos

EventoCambio
pack.created, pack.updated, pack.archived y pack.restoredNuevos, con el pack en view=all
pack.deletedNuevo, con {id, object: "pack", deleted: true}
product.deletedNuevo, con {id, object: "product", deleted: true}
product.updatedTambié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.code es un código estable y nullable (archived, inactive, out_of_window, no_channel, component_unsellable o price_unreachable) y null cuando el pack se puede vender. Modificar o borrar las imágenes de un pack de otra empresa responde 404 pack_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 404 price_list_item_not_found, con param item_id. Los errores de dominio duplicate_price_list_name, invalid_price_list_item, inactive_price_list y price_list_in_use llevan su code y su param.
  • Idempotencia. Las escrituras de packs, ofertas y tarifas (19 escrituras) responden 409 idempotency_key_in_use mientras otra petición con la misma Idempotency-Key sigue 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 400 parameter_invalid_format, con param.
  • 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}/packs y POST /v1/companies/{company}/packs/{pack}/restore responden 402 plan_limit_exceeded con details.resource packs, current y limit cuando 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 packs y promotions de la v1 exigen el módulo products en cada petición y responden 403 feature_not_available_in_plan si falta. products y price-lists responden como hasta ahora. Una línea de pack por pack_id en un documento exige el módulo packs.
  • Ofertas. El label admite como máximo 24 caracteres.
  • Documentos. Los ejemplos de línea incluyen pack_group: null.

Nuevos endpoints12

EndpointDescripción
GET/v1/companies/{company}/packsListar todos los packs
POST/v1/companies/{company}/packsCrear 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}/archiveArchivar un pack
POST/v1/companies/{company}/packs/{pack}/restoreRestaurar un pack
GET/v1/companies/{company}/packs/{pack}/price-breakdownObtener el desglose de precio de un pack
POST/v1/companies/{company}/packs/{pack}/imagesSubir 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-channelsPublicar o retirar productos de la web en bloque

Endpoints actualizados104

EndpointDescripción
POST/v1/companies/{company}/invoices/bulk-createCrear facturas en bloque
POST/v1/accounts/{account}/webhooksCrear un webhook endpoint de cuenta
POST/v1/accounts/{account}/api-keysCrear una API key
POST/v1/companies/{company}/invoices/{invoice}/correctiveGenerar factura rectificativa
POST/v1/companies/{company}/delivery-notesCrear un albarán
POST/v1/companies/{company}/invoicesCrea una factura
POST/v1/companies/{company}/productsCrear un producto
GET/v1/companies/{company}/productsListar todos los productos
POST/v1/companies/{company}/products/{product}/presentationsCrear una presentación de producto
GET/v1/companies/{company}/products/{product}/presentationsListar presentaciones de producto
POST/v1/companies/{company}/products/{product}/variantsCrear una variante de producto
GET/v1/companies/{company}/products/{product}/variantsListar variantes de producto
POST/v1/companies/{company}/proformasCrea una proforma
POST/v1/companies/{company}/quotesCrea un presupuesto
POST/v1/companies/{company}/recurring-invoicesCrea una factura recurrente
POST/v1/companies/{company}/webhook-endpointsCrea un webhook endpoint
GET/v1/companies/{company}/webhook-endpointsListar todos los webhook endpoints
PATCH/v1/accounts/{account}/webhooks/{webhook}Actualizar un webhook endpoint de cuenta
PATCH/v1/companies/{company}/delivery-notes/{delivery_note}Actualizar un albarán
PATCH/v1/companies/{company}/invoices/{invoice}Actualizar una factura
GET/v1/companies/{company}/products/{product}Obtener un producto
PATCH/v1/companies/{company}/products/{product}Actualizar un producto
PATCH/v1/companies/{company}/products/{product}/presentations/{presentation}Actualizar una presentación de producto
PATCH/v1/companies/{company}/products/{product}/variants/{variant}Actualizar una variante de producto
POST/v1/companies/{company}/products/{product}/videoSube un vídeo a un producto
PATCH/v1/companies/{company}/proformas/{proforma}Actualizar una proforma
PATCH/v1/companies/{company}/quotes/{quote}Actualizar un presupuesto
PATCH/v1/companies/{company}/recurring-invoices/{recurring_invoice}Actualizar una factura recurrente
GET/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}Obtener un webhook endpoint
PATCH/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}Actualizar un webhook endpoint
POST/v1/companies/{company}/products/find-by-external-idBuscar un producto por external ID
POST/v1/companies/{company}/products/find-by-skuBuscar un producto por SKU
GET/v1/companies/{company}/products/low-stock-reportLista los productos por debajo del umbral de stock
GET/v1/companies/{company}/eventsListar todos los eventos
GET/v1/companies/{company}/products/{product}/configurationsListar combinaciones comerciales de un producto
GET/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveriesLista las entregas de webhook
POST/v1/companies/{company}/products/{product}/base-unit-replacementSustituir un producto cambiando su unidad base
POST/v1/companies/{company}/products/{product}/resolve-selectionResolver una selección de catálogo
POST/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/rotate-secretRota el secreto del webhook
GET/v1/companies/{company}/products/searchBusca productos
POST/v1/accounts/{account}/webhooks/{webhook}/testEnviar un evento de prueba a un webhook endpoint de cuenta
POST/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/test-eventEnviar un evento de prueba
GET/v1/companies/{company}/events/{event}Obtener un evento
GET/v1/companies/{company}/webhook-endpoints/{webhook_endpoint}/deliveries/{delivery}Recupera la entrega del webhook
POST/v1/companies/{company}/products/{product}/toggle-activeAlternar el estado activo del producto
PATCH/v1/companies/{company}/products/{product}/stockActualizar el stock de un producto
POST/v1/companies/{company}/proformas/{proforma}/acceptAceptar una proforma
POST/v1/companies/{company}/quotes/{quote}/acceptAceptar un presupuesto
POST/v1/companies/{company}/invoices/{invoice}/annulAnular una factura
POST/v1/companies/{company}/invoices/{invoice}/assign-real-numberAsignar un número de factura real
POST/v1/companies/{company}/delivery-notes/{delivery_note}/cancelAnular un albarán
POST/v1/companies/{company}/delivery-notes/{delivery_note}/convertConvertir albarán en factura
POST/v1/companies/{company}/proformas/{proforma}/convertConvertir proforma en factura
POST/v1/companies/{company}/quotes/{quote}/convertConvertir presupuesto en factura
GET/v1/companies/{company}/delivery-notesListar todos los albaranes
GET/v1/companies/{company}/invoicesListar todas las facturas
POST/v1/companies/{company}/price-listsCrear una tarifa
GET/v1/companies/{company}/proformasListar todas las proformas
GET/v1/companies/{company}/quotesListar todos los presupuestos
POST/v1/companies/{company}/invoices/{invoice}/create-recurringCrear una factura recurrente a partir de una factura
GET/v1/companies/{company}/delivery-notes/{delivery_note}Obtener un albarán
GET/v1/companies/{company}/invoices/{invoice}Recupera una factura
DEL/v1/companies/{company}/price-lists/{priceList}Eliminar una tarifa
PATCH/v1/companies/{company}/price-lists/{priceList}Actualizar una tarifa
DEL/v1/companies/{company}/price-lists/{priceList}/items/{item}Eliminar un ítem de tarifa
GET/v1/companies/{company}/proformas/{proforma}Obtener una proforma
GET/v1/companies/{company}/quotes/{quote}Obtener un presupuesto
POST/v1/companies/{company}/delivery-notes/{delivery_note}/duplicateDuplicar un albarán
POST/v1/companies/{company}/invoices/{invoice}/duplicateDuplicar una factura
POST/v1/companies/{company}/proformas/{proforma}/duplicateDuplicar una proforma
POST/v1/companies/{company}/quotes/{quote}/duplicateDuplicar un presupuesto
POST/v1/companies/{company}/delivery-notes/find-by-external-idBuscar un albarán por external ID
POST/v1/companies/{company}/invoices/find-by-external-idBuscar una factura por external ID
POST/v1/companies/{company}/invoices/find-by-numberBuscar una factura por número
POST/v1/companies/{company}/proformas/find-by-external-idBuscar una proforma por external ID
POST/v1/companies/{company}/quotes/find-by-external-idBuscar un presupuesto por external ID
POST/v1/companies/{company}/invoices/{invoice}/issueEmite una factura
GET/v1/companies/{company}/invoices/{invoice}/correctivesListar facturas rectificativas
POST/v1/companies/{company}/price-lists/{priceList}/itemsHacer upsert de un ítem de tarifa
POST/v1/companies/{company}/delivery-notes/{delivery_note}/mark-deliveredMarca el albarán como entregado
POST/v1/companies/{company}/invoices/{invoice}/mark-paidMarca la factura como pagada
POST/v1/companies/{company}/invoices/{invoice}/mark-sentMarca una factura como enviada
POST/v1/companies/{company}/price-lists/{priceList}/items/{item}/purgeEliminar permanentemente una entrada de tarifa retirada
POST/v1/companies/{company}/price-lists/{priceList}/items/{item}/reassignReasignar una entrada de tarifa retirada
POST/v1/companies/{company}/proformas/{proforma}/rejectRechazar una proforma
POST/v1/companies/{company}/quotes/{quote}/rejectRechazar un presupuesto
PATCH/v1/companies/{company}/invoices/{invoice}/rescheduleReprogramar una factura
POST/v1/companies/{company}/invoices/{invoice}/scheduleProgramar una factura
POST/v1/companies/{company}/invoices/{invoice}/sendEnvía la factura por email
POST/v1/companies/{company}/proformas/{proforma}/sendEnvía la proforma por email
POST/v1/companies/{company}/quotes/{quote}/sendEnvía el presupuesto por email
POST/v1/companies/{company}/delivery-notes/{delivery_note}/signFirmar un albarán
POST/v1/companies/{company}/invoices/substitute-simplifiedSustituir facturas simplificadas por factura completa
POST/v1/companies/{company}/invoices/{invoice}/unscheduleDesprogramar una factura
POST/v1/companies/{company}/invoices/{invoice}/unsendAnular el envío de una factura
POST/v1/companies/{company}/invoices/{invoice}/voidAnular una factura
GET/v1/companies/{company}/recurring-invoicesListar todas las facturas recurrentes
GET/v1/companies/{company}/recurring-invoices/{recurring_invoice}Obtener una factura recurrente
POST/v1/companies/{company}/recurring-invoices/find-by-external-idBuscar una factura recurrente por external ID
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/activateActivar factura recurrente
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/pausePausar factura recurrente
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/resumeReanudar factura recurrente
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/skipOmitir la próxima generación de la factura recurrente
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/cancelAnular factura recurrente

En esta página

¿Te echamos una mano?Contactar con soporte