Project restrictions
If you're a B2B tenant, a project can carry its own purchasing rules — restrictions on what may be bought against that project at checkout. These are separate from entity conditions: an entity condition applies to an item everywhere; a project restriction only applies when a purchase is being made against that specific project.
Project restrictions are managed on the project itself. This page defines what each restriction type means, since that's what ECS actually enforces at checkout.
Restriction types
Whitelist
Checks an item property against an allowed list.
{ "type": "WHITELIST", "propertyName": "department", "allowedValues": ["grocery", "pharmacy"], "allowIfMissing": false }
Denied unless item.additionalProperties[propertyName] is one of allowedValues.
allowIfMissing (optional, defaults to false) decides the outcome when the item doesn't
carry propertyName at all: pass if true, fail if false.
Blacklist
Checks an item property against a denied list.
{ "type": "BLACKLIST", "propertyName": "department", "deniedValues": ["tobacco", "alcohol"], "allowIfMissing": false }
Denied if item.additionalProperties[propertyName] is one of deniedValues. Same
allowIfMissing mechanics as whitelist, but the opposite default: allowIfMissing
defaults to true here, so an item that doesn't carry propertyName at all passes —
it can't match the denylist. Set allowIfMissing: false if you want a missing property to
be denied instead.
When several blacklist rules cover the same property, a missing property passes if any
of them allows it — and a rule that omits allowIfMissing counts as allowing it. To deny a
missing property, every blacklist rule on that property has to set allowIfMissing: false.
Whitelisted items
Checks the item's own id against an allowed list.
{ "type": "WHITELISTEDITEMS", "itemIds": ["item-1", "item-2"] }
Denied unless item.id is one of itemIds.
Blacklisted items
Checks the item's own id against a denied list.
{ "type": "BLACKLISTEDITEMS", "itemIds": ["item-99", "item-100"] }
Denied if item.id is one of itemIds.
Things worth knowing
- Multiple restrictions of the same type combine (union) rather than applying independently — for whitelist/blacklist that means same type and same property; whitelisted-items/blacklisted-items combine within their own type regardless, since they have no property to scope by.
- A misspelled or unrecognized
typedoesn't block anything — it passes silently, with nothing to flag the mistake. Double-check the spelling. - Checked live per purchase (briefly cached), not against anything pre-loaded.
See Decisions and outcomes for what checkout sees when a restriction fails, and the API reference for how to preview a project restriction's outcome before relying on it.