See also: Offers REST API reference for request/response shapes, status codes, and error semantics.
Only offers with
status: "active" are considered by Decision Flows. Draft and paused offers are excluded from all candidate selection.How Offers Work at Runtime
When a Decision Flow executes via the Recommend API, every offer passes through these stages:Common Use Cases
Priority and Business Value
Two fields control how aggressively an offer competes during scoring. They look similar but serve different purposes in the PRIE formula:
Both are normalized to 0—1 at scoring time. Setting either to 0 eliminates the offer from PRIE scoring entirely (because PRIE is multiplicative).
Priority Bands
Business Value Example (Retail Rewards)
Status Lifecycle
Offers progress through a defined lifecycle:Qualification Config
Control which customers are eligible to receive this offer via theeligibility object:
Budget Config
Set spend and impression limits via thebudget object:
Budget checking uses atomic Redis counter increments (with Prisma fallback) to prevent race conditions under concurrent load. When an offer’s budget is exhausted, it is automatically excluded from decisioning.
The
budget_exhausted Contact Policy rule type can also enforce budget limits at the policy level.Inventory Config
Track finite stock for an offer via theinventory object:
When
totalStock is set and remainingStock reaches 0, the offer is excluded from batch decisioning (inventory_out_of_stock), and in realtime decisioning its remaining stock feeds the Lagrangian ranking constraint the same way budget does. Recording a conversion for the offer atomically decrements remainingStock (serialized to prevent oversell). An offer with no totalStock is treated as unlimited.
Schedule Config
Restrict when an offer is eligible via theschedule object:
Schedule filtering happens early in the pipeline (inventory stage) and applies to both regular and mandatory offers. An offer outside its schedule window is excluded regardless of priority or mandatory status.
Mandatory Governance
Marking an offer asmandatory: true activates a special runtime path for compliance-critical communications. Mandatory offers bypass decisioning gates, bypass suppression policies, and are lifted to the front of the ranking step regardless of their priority or model score. The lift is honored by all four ranking algorithms (topN, diversity, round_robin, explore_exploit) so the default diversity flow does not bury a mandatory regulatory notice in a low-traffic category.
Required Fields
Whenmandatory is true, the API enforces three governance fields:
If any are missing, the API returns
400 Bad Request. Only users with the admin role can create or update mandatory offers.
mandatoryExpiresAt is enforced both at save time and at decision time. It must be a future date when you save the offer, and once the timestamp passes, the decisioning runtime automatically treats the offer as non-mandatory — it falls back to normal eligibility/fit gating, contact policies, and ranking. You do not need to manually clear mandatory; the override self-retires at its expiry.Example: Regulatory Disclosure
Emergency Exclusions
TheemergencyExcluded flag lets you instantly remove an offer from all recommendations without changing its status or modifying a Decision Flow. Designed for pricing errors, compliance issues, or product recalls.
Set via API:
Creating an Offer
1
Navigate to Offers
Go to Studio > Offers in the sidebar.
2
Click + New Offer
Click the + New Offer button in the top-right corner.
3
Fill in basic info
Enter the offer name, description, and select a Category and sub-category.
4
Set priority and business value
Choose the priority level (Emphasis) and business value (Impact). Both default to 50.
5
Configure qualification (optional)
Set propensity thresholds, required segments, and recency rules.
6
Configure budget and schedule (optional)
Set impression caps, daily budget limits, start/end dates, and time windows.
7
Fill custom fields
Populate any custom fields defined by the parent category, including computed field formulas.
8
Save and activate
Save as draft, review, then set to
active when ready.Field Reference
Every field accepted byPOST /api/v1/offers (create) and PUT /api/v1/offers (update):
API Quick Reference
Create
201 Created with the full offer object including generated id.
List
status, categoryId, tags.
Update
id in the request body along with the fields to update. Only provided fields are changed.
Delete
409 Conflict if the offer has creatives or interaction history. Add ?force=true to confirm permanent deletion.
Next Steps
Channels
Define how your offers are delivered to customers.
Creatives
Create the content variants for each offer and channel.
Decision Flows
Build the pipeline that scores, filters, and ranks your offers.
Glossary
Look up key terms used across the platform.