Saltar al contenido
API v1 · https://bentho.org/api
POST/api/mod/productos/{espacio}/promotions

Crea una promoción

Una regla de descuento: cuándo aplica (predicado) y cuánto rebaja (metodo). Se aplica sola en cada cotización que la cumpla.

  • PERMISOescribe
  • CRÉDITOSno gasta
  • AUTENTICACIÓNBearer bth_…

PARÁMETROS

CAMPOTIPOREQUERIDOQUÉ ES
espaciostringSÍEl id del espacio (sale en GET /api/companies). Tiene que tener el módulo Productos.

CUERPO · JSON

CAMPOTIPOREQUERIDOQUÉ ES
nombrestringSÍSale como regla en cada descuento.
metodoobjectnoCuánto descuenta: ver metodo. Por defecto, 0 %.
predicadoobjectnoCuándo aplica: ver predicado. Vacío: siempre.
codigostringnoSu código, como etiqueta. Para exigirlo, ponlo en el predicado.
estadostringnoactivo o inactivo. Por defecto activo.
grupo_exclusividadstringnoLas del mismo grupo no se suman: aplica la de mayor prioridad.
prioridadintegernoMayor gana. Por defecto 0.
limite_usosintegernoCuántas ventas confirmadas pueden usarla. Sin él, sin límite.
starts_at · ends_atstringnoSu vigencia, en ISO 8601.
campaign_idstringnoUna campaña con presupuesto: agotado, la promoción deja de aplicar.

RESPUESTA 201

La promoción creada.

CAMPOTIPOQUÉ ES
id · nombrestringEl id y el nombre.
codigostring | nullSu código, como etiqueta.
estadostringactivo o inactivo. Solo activo descuenta.
grupo_exclusividadstring | nullUna sola promoción por grupo en cada cotización.
prioridadintegerMayor gana dentro de su grupo.
limite_usosinteger | nullCuántas ventas pueden usarla. null: sin límite.
starts_at · ends_atstring | nullSu vigencia, en ISO 8601.
predicado · metodoobjectCuándo aplica y cuánto descuenta: ver metodo y predicado.
campaign_idstring | nullSu campaña, si tiene.
created_atnumberSegundos desde 1970, con decimales.

METODO

CAMPOTIPOQUÉ ES
metodo"percentage" | "fixed"percentage: valor es un porcentaje (10 = 10 %), redondeado a unidades. fixed: valor es el importe a descontar. Por defecto percentage.
target"item" | "order"item: rebaja líneas del carrito. order: rebaja el subtotal y lo reparte entre las líneas. Por defecto order.
allocation"each" | "once"Solo con item: each rebaja cada línea que encaja; once, solo la primera. Por defecto each.
valornumber | stringEl porcentaje o el importe. Por defecto 0.

PREDICADO

CAMPOTIPOQUÉ ES
field · cmp · valueuna condiciónfield es subtotal, cantidad_total, variant_ids, codigos_promo o canal. cmp es eq, gt, gte, lt o lte para cifras; contains para las listas (variant_ids, codigos_promo); in para que canal esté en una lista.
op · clauses"and" | "or", arrayUne varias condiciones. Se pueden anidar.
{}vacíoSin condición: aplica a todos los carritos.

ERRORES DE ESTA RUTA · SIEMPRE {"detail": …}

STATUSCUÁNDODETAIL LITERAL
403El espacio no tiene el módulo Productosmódulo no habilitado para este espacio.
403La clave es de solo lecturaTu cuenta es de solo lectura en este espacio.
422Falta un campo obligatorio o uno no es de su tipo (detail es una lista)—

Y los de cualquier ruta —clave inválida, cuenta no al día, IP, límites—, en Errores, límites y créditos.

CONVIENE SABER

  • codigo no se exige solo: una promoción con código pero sin condición sobre codigos_promo se aplica a todos los carritos.
  • Para rebajar un producto concreto, usa target: "item" y la condición {"field": "variant_ids", "cmp": "contains", "value": "<variant_id>"}: el descuento cae solo en esa línea.
  • No se edita: para cambiarla, bórrala y créala otra vez. Más ejemplos en la guía.