Skip to content

Earn 30% on every license you refer. Join the affiliate program

Scopes & permissions.

Understanding scope enforcement and what each permission level allows.

Oct 4, 2026

The Partner key creation form selects View only by default. Choose a write preset explicitly when the integration needs it. Existing grants remain unchanged.

Scopes define what an Integration API key may do. Every agent endpoint checks the request's key for the required scope before executing. If the key lacks the required scope, the API rejects the request with a 403 error.

How scopes work

Each key carries an array of scopes assigned at creation. When a request hits an endpoint:

  1. The controller checks which scope(s) the endpoint requires
  2. The platform compares the key's scopes against the requirement
  3. Most endpoints accept any listed scope. Monetary prepaid-pass writes require both write:passes and write:pass-money as literal grants.
  4. If the key does not meet the requirement, the platform returns a 403 AUTH_INSUFFICIENT_SCOPE error.

Available scopes

Read scope

Scope What It Allows
read Read resources available to the partner or member role

For partner and member keys, read permits the read endpoints for that key's role. Admin keys use read:partners, read:members, and read:analytics. A scope never changes a key's role.

Write scopes

Scope What It Allows
write:clubs Create, update, and delete clubs
write:cards Create, update, and delete loyalty cards
write:rewards Create, update, and delete rewards
write:transactions Record purchases and deduct points
write:stamps Create, update, and delete stamp cards; add stamps; redeem stamp rewards
write:vouchers Create, update, and delete vouchers; validate and redeem voucher codes
write:passes Create, update, and delete visit-pass products; sell, scan, and undo visits
write:pass-money Together with write:passes, create and update monetary products, record external sales, spend balances, and reverse spends
write:wallet Update Apple Wallet item settings; also permits reading those settings
write:tiers Create, update, and delete membership tiers
write:staff Create, update, and delete staff members

Write scopes are resource-specific. A key with write:transactions can record purchases but cannot create clubs.

Member write scopes

Member keys use a separate set of write scopes:

Scope What It Allows
write:profile Update own profile (name, locale)
write:redeem Check reward eligibility through the claim endpoint

Member write scopes are self-scoped. They affect the key owner's data and nothing else.

Super scope

Scope What It Allows
admin Ordinary read and write scopes within the key's role; monetary writes require explicit grants

The admin scope satisfies ordinary scope checks within the key's role. Monetary pass writes still require both explicit grants: write:passes and write:pass-money. Ownership, entitlement, and business rules still apply.

Admin scopes

Admin keys have platform-level scopes:

Scope What It Allows
read:partners View all partner profiles and permissions
write:partners Update partner permissions, activate/deactivate partners
read:members Platform-wide member search and details
read:analytics Platform and per-partner analytics metrics

Scope hierarchy

Scopes follow a hierarchy:

graph LR
    A["admin"] -->|"ordinary scopes"| B["read"]
    A --> C["Resource write scopes"]
    C --> D["write:clubs"]
    C --> E["write:cards"]
    C --> F["write:rewards"]
    C --> G["write:transactions"]
    C --> H["write:stamps"]
    C --> I["write:vouchers"]
    C --> L["write:passes"]
    C --> J["write:tiers"]
    C --> K["write:staff"]

    style A fill:#fef3c7,stroke:#f59e0b,stroke-width:2px,color:#92400e

How the hierarchy behaves:

  • Write implies read on that resource. A key with write:cards can call GET /partner/cards, but cannot read members or other resources
  • Admin grants ordinary scopes. Monetary pass writes also require both explicit monetary grants
  • Read cannot write. A read key cannot create, update, or delete anything
  • Write scopes are isolated. write:clubs cannot read rewards, write:transactions cannot read staff

Permission presets

When creating a key in the dashboard, you choose from presets that map to scope arrays:

Preset Scopes Best For
View only read Reporting dashboards, balance checks, AI queries
Point of Sale read, write:transactions, write:rewards Point-of-sale systems (earn, burn, and rewards)
Full management read, write:cards, write:rewards, write:stamps, write:vouchers, write:passes, write:clubs Automation tools, general integrations
Full access admin Full programmatic control, development

The partner key form has a separate Allow monetary prepaid pass writes checkbox, unchecked by default. Selecting it adds both monetary write scopes to the chosen preset. The presets above alone do not grant monetary writes, including Full access. Read access to money balances uses pass_format=2 and the existing read permission.

Member presets

Member keys have two presets:

Preset Scopes Best For
View only read Balance checks, browsing rewards, transaction history
Full access read, write:redeem, write:profile Reward eligibility, profile updates, and saved cards

Admin presets

Admin keys manage the platform:

Preset Scopes Best For
View only read:partners, read:members, read:analytics Monitoring dashboards, CRM exports
Standard read:partners, read:members, read:analytics, write:partners SaaS billing integration, partner management
Full access admin Full platform control

Endpoint scope requirements

Partner CRUD resources share one pattern:

Request Type Required Scope
GET (list and detail) read or the resource's write scope
POST, PUT, DELETE, and action endpoints The resource's write scope

The pattern covers clubs (write:clubs), loyalty cards (write:cards), rewards (write:rewards), stamp cards (write:stamps), vouchers (write:vouchers), prepaid passes (write:passes), tiers (write:tiers), and staff (write:staff). Action endpoints, such as adding stamps or validating vouchers, require the same write scope as their resource.

See the Complete endpoint reference for the full per-endpoint listing with scopes, parameters, and response fields.

The groups below differ from the CRUD pattern:

Monetary prepaid passes

Monetary product writes, sale, spend, and spend reversal require write:passes and write:pass-money, plus pass_format=2. Neither admin nor either write scope alone meets that requirement. Member keys remain read-only for pass balances. Refund and correction actions have no Agent endpoint. See monetary pass calls.

Apple Wallet settings

Endpoint Required scope
GET /partner/apple-wallet/{type}/{id} read or write:wallet
PUT /partner/apple-wallet/{type}/{id} write:wallet

See the Apple Wallet API for item types and fields.

Transactions

Endpoint Required Scope
GET /partner/transactions read or write:transactions
POST /partner/transactions/purchase write:transactions
POST /partner/transactions/redeem write:rewards
POST /partner/transactions/deduct write:transactions

Redeeming a reward requires write:rewards, not write:transactions.

Members

Partner member endpoints are read-only. There is no write:members scope.

Endpoint Required Scope
GET /partner/members read
GET /partner/members/{id} read
GET /partner/members/{id}/balance/{cardId} read

Member key endpoints

Endpoint Required Scope
GET /member/profile read
PUT /member/profile write:profile
GET /member/balance read
GET /member/cards and GET /member/cards/{id} read
GET /member/transactions and GET /member/transactions/{cardId} read
GET /member/rewards read
POST /member/rewards/{id}/claim write:redeem
GET /member/passes and GET /member/passes/{id} read
GET /member/discover read
POST /member/discover/resolve read
POST /member/discover/follow write:profile
POST /member/discover/unfollow write:profile

Following and unfollowing a card counts as a profile write. Both change the member's own "My Cards" collection, so they require write:profile.

Admin partners

Endpoint Required Scope
GET /admin/partners read:partners
GET /admin/partners/{id} read:partners
PATCH /admin/partners/{id}/permissions write:partners
POST /admin/partners/{id}/activate write:partners
POST /admin/partners/{id}/deactivate write:partners

Admin members

Endpoint Required Scope
GET /admin/members read:members
GET /admin/members/{id} read:members

Admin analytics

Endpoint Required Scope
GET /admin/analytics/overview read:analytics
GET /admin/analytics/partners/{id} read:analytics

Scope errors

When a key lacks the required scope:

{
  "error": true,
  "code": "AUTH_INSUFFICIENT_SCOPE",
  "message": "This action requires the 'write:cards' scope.",
  "retry_strategy": "no_retry",
  "details": {
    "required_scope": "write:cards"
  }
}

The retry_strategy is no_retry. The key cannot gain scopes at runtime. Create a new key with the required scopes instead.