Decisions and outcomes
Every check — an entity condition or a project restriction — resolves to one of three outcomes:
| Decision | Meaning |
|---|---|
| Allow | The check passes. |
| Soft deny | The check couldn't be completed — usually because information it needed wasn't available. Checkout may prompt for that information or retry; it isn't a final "no." |
| Hard deny | The check fails outright. |
How outcomes combine on one item
An item can have several checks running against it at once — more than one entity condition, plus project restrictions when the purchase is against a project. The item is only allowed through if every one of its checks allows it; a single denial from any check denies the item. When more than one check fails, all of the failures are reported together, not just the first one, so everything that needs addressing is visible at once.
Reason codes
Each denial carries a machine-readable reason code identifying exactly what failed:
| Check | Reason code | Meaning |
|---|---|---|
| Age restriction | age_restriction.missing_context | Shopper's age wasn't available (soft deny) |
| Age restriction | age_restriction.underage | Shopper is below the minimum age |
| License requirement | license_requirement.missing_context | Shopper's licenses weren't available (soft deny) |
| License requirement | license_requirement.license_missing | Shopper's licenses don't include the required one |
| Project restriction | project_restriction.project_unreachable | The project's restrictions couldn't be looked up (soft deny) |
| Project restriction | project_restriction.property_missing | The item was missing a property a restriction needed, and wasn't allowed to be |
| Project restriction | project_restriction.whitelist_not_met | Item property's value wasn't in the allowed list |
| Project restriction | project_restriction.blacklist_not_met | Item property's value was in the denied list |
| Project restriction | project_restriction.item_not_whitelisted | Item id wasn't in the allowed list |
| Project restriction | project_restriction.blacklisted_item | Item id was in the denied list |
See the API reference for the exact response shape these appear in.