Evaluate incentive/decision rules for a profile event
Runs the incentive decision pipeline for one profile + event and returns a synchronous summary of matched rules; the actual effects (e.g. coupon grants) are queued asynchronously.
Profile traits are loaded from identified_users.traits_masked (same store as PUT /api/v1/profile) and shallow-merged with any inline traits in the body (inline wins, not persisted).
Auth: X-API-Key with scope decide OR decision:call (x-required-scope: decide|decision:call). projectId in the body must match the key’s project.
Rate limit: 30 req/min per (projectId, IP) — over → 429.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Must match the API key’s project (tenant isolation).
The user/profile ID whose traits are loaded for evaluation.
object
object
Optional inline traits merged over the stored profile for THIS decision only (not persisted).
object
Optional feature snapshot for offer-selection. When omitted, minimal null defaults are used.
object
Example
{ "projectId": "prj_123", "profileId": "uid_456", "event": { "name": "checkout_abandoned", "props": { "cartValue": 12000 } }}Responses
Section titled “Responses”Decision result. matched is empty when no rule fired.
object
object
object
Invalid JSON or missing required fields.
object
Human-readable error message.
Seconds to wait before retrying (present on 429/503).
Examples
{ "error": "invalid_json"}{ "error": "missing_required_fields"}Missing/invalid API key.
object
Human-readable error message.
Seconds to wait before retrying (present on 429/503).
Examplegenerated
{ "error": "example", "retryAfter": 1, "message": "example", "affectedIndices": [ 1 ]}API key lacks the decide/decision:call scope.
object
Human-readable error message.
Seconds to wait before retrying (present on 429/503).
Examplegenerated
{ "error": "example", "retryAfter": 1, "message": "example", "affectedIndices": [ 1 ]}Project not found or key belongs to a different project (tenant isolation).
object
Human-readable error message.
Seconds to wait before retrying (present on 429/503).
Example
{ "error": "not_found"}Rate limit exceeded (30/min per project+IP).
object
Human-readable error message.
Seconds to wait before retrying (present on 429/503).
Example
{ "error": "rate_limited"}Decision cache/service binding unavailable.
object
Human-readable error message.
Seconds to wait before retrying (present on 429/503).
Example
{ "error": "service_unavailable"}