Factuarea APIDevelopers

Sustituir un producto cambiando su unidad base

Sustituye un producto por otro NUEVO con una unidad base distinta y responde 201 con el producto nuevo, cuyo replaces apunta al antiguo.

  • El stock, las presentaciones que conserves, las variantes, las ofertas de proveedor, las entradas de tarifa y los componentes de pack se convierten y pasan al producto nuevo; el antiguo se desactiva, conserva todo su historial, su replaced_by apunta al nuevo y nunca se puede reactivar.
  • Es IRREVERSIBLE: no existe operación inversa, así que Idempotency-Key es obligatoria y reintentar con la misma clave devuelve la misma respuesta sin crear un segundo producto.
  • El cuerpo es el de la vista previa más el impact_token obligatorio de una vista previa vigente con la misma petición.
  • No consume cuota del plan: el producto antiguo deja de contar y el uso neto es cero.
  • Cuando la conversión pierde precisión o no hay equivalencia, hay que confirmar base_price (422 base_unit_replacement_price_confirmation_required).
  • Rechazos: 422 business_rule_violation con subcódigo product_already_replaced, base_unit_replacement_conversion_unavailable o base_unit_replacement_blocked_by_packs; 422 parameter_invalid_value con subcódigo base_unit_replacement_same_unit (el destino ya es la unidad base del producto), base_unit_replacement_equivalence_invalid, base_unit_replacement_price_confirmation_required, base_unit_replacement_preview_stale o base_unit_replacement_decision_invalid.
  • El evento product.replaced se publica con el producto nuevo como objeto.
  • Un producto de otra empresa devuelve 404 product_not_found.
POST
/products/{product}/base_unit_replacement
AuthorizationBearer <token>

En: header

Parámetros de ruta

product*string

Headers

Idempotency-Key*string

Clave opaca generada por el cliente (hasta 255 caracteres; se recomienda UUID v7) que permite reintentos seguros: la primera respuesta se almacena y se reproduce en las repeticiones sin volver a ejecutar la mutación. Reutilizar una clave con un cuerpo distinto devuelve 409 idempotency_key_reused. Consulta la guía de idempotencia. Obligatoria en esta operación: repetirla produce un efecto irreversible (un email enviado, un archivo generado, una llamada a un tercero o un cargo), por lo que una petición sin esta cabecera se rechaza con 422 idempotency_key_required antes de ejecutar lógica de negocio.

Longitud1 <= length <= 255
Factuarea-Version?string

Fija la versión de la API (YYYY-MM-DD, versionado por fecha estilo Stripe) para esta petición; omítelo para usar la versión fijada de la clave, o la última si no hay ninguna. Versión no soportada → 400 unsupported_api_version; malformada → 400 parameter_invalid_format. La versión efectiva se refleja en la cabecera de respuesta Factuarea-Version. Consulta la guía de Versioning.

Formatodate
X-Active-Profile?string

Opera en nombre de una empresa hija (API key maestra de gestoría): pasa su id público (UUID v7) y la petición se ejecuta contra los datos de esa hija sin cambiar el scope, el tier ni el environment de la clave (omítelo para usar la propia empresa de la clave). UUID inválido → 400 parameter_invalid_uuid; id desconocido o no propio → 404 profile_not_found. Consulta la guía de Acting on behalf.

Formatouuid

Cuerpo de la petición

application/json

Definiciones de TypeScript

Usa el tipo request body en TypeScript.

Cuerpo de la respuesta

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json