A scope is a single permission. Your app can only touch data a merchant explicitly granted. Scopes are shown on the consent screen with their risk level, so over-asking directly costs you installs — and reviewers compare your scope list against what your app actually does.
Naming
resource:action — e.g. payments:read = "list and view payments".
Action
Means
read
List and retrieve objects. Never changes anything.
write
Create and update objects of that resource.
create / capture / cancel
Narrow, money-moving actions that are granted separately.
Risk levels
Risk
Meaning
Low
Read-only, no personal or money-moving data. Approved by default.
Medium
Personal data or configuration changes. Needs a clear reason in your listing.
High
Moves or reverses money. Written justification at review, extra security checks.
Restricted
Financial reporting data. Granted case by case and revocable.
Catalog
Scope
What it lets your app do
Typical use case
Risk
merchant:read
Read the merchant profile: name, country, currency
Show whose account you are connected to
Low
payments:read
List and view payments
Order sync, reporting, reconciliation
Low
payments:create
Start new payments
Custom checkout, POS terminal
High
payments:capture
Capture a previously authorized payment
Ship-then-charge flows
High
payments:cancel
Release an uncaptured authorization
Cancelled orders
High
refunds:read
View refunds
Returns dashboards
Low
refunds:create
Issue refunds — moves money out
Returns automation
High
customers:read
Read buyer records (personal data)
CRM sync
Medium
customers:write
Create and update buyers
Two-way CRM sync
Medium
products:read
Read catalog and prices
Storefront, catalog sync
Low
products:write
Create and update products/prices
Catalog management, PIM
Medium
invoices:read
Read invoices
Accounting export
Low
invoices:write
Create, send and void invoices
Invoicing tools
Medium
subscriptions:read
Read subscriptions
Churn analytics, entitlements
Low
subscriptions:write
Change plans, quantities, cancel
Subscription management
High
disputes:read
Read disputes and deadlines
Chargeback alerting
Medium
disputes:write
Submit or update evidence
Chargeback automation
High
payouts:read
Read payouts and bank settlement data
Bank reconciliation
Restricted
analytics:read
Aggregated volume figures
Dashboards
Low
webhooks:read
Read the merchant's webhook configuration
Diagnostics
Low
webhooks:write
Manage webhook endpoints
Auto-setup during install
Medium
Rules that trip people up
Least privilege. Reviewers reject scope lists that don't match the described functionality.
Read before write. Ship the read-only version, add write scopes in a later version with a proven track record.
Adding a scope requires a new app version and re-consent from every merchant. Missing scopes only surface as 403 insufficient_scope at runtime — check the granted scopes after install and degrade gracefully.
Restricted scopes can be revoked if we see misuse; your app must keep working without them.
A missing scope returns 403 with error.type: "insufficient_scope" — see Error & status codes.
The App API is versioned in the path: https://api.spuke.com/v1/app. A v1 route never changes meaning; incompatible redesigns ship as v2 and both run in parallel during the migration window.
Additive by default
These can ship any day without notice — build for them:
new fields on existing objects
new enum values (status, reason, failure_code)
new event types
new endpoints and new optional query parameters
Rules that keep you safe: ignore unknown fields, never fail on an unknown enum value, ignore unknown event types, never depend on field order or on the exact shape of an id.
Breaking changes
Removing a field, renaming one, changing a type, tightening a limit or retiring an event type are breaking. They are announced at least 90 days ahead by email to the developer contact, in the dashboard changelog and with a deprecation note in the affected docs page. During the window, both behaviours are available where technically possible.
App versions
Your own app is versioned separately: each submission freezes a listing plus a scope set. Published versions stay attached to the installations that consented to them, so adding a scope never silently widens an existing install — the merchant re-consents first.
Deprecation signals
Deprecated endpoints answer with a header for the whole notice period:
Spuke-Deprecation: true
Spuke-Sunset: 2026-12-01
Alert on that header in your logs — it is the earliest automated warning you get.
Changelog
The dashboard changelog lists every platform change with a date, a type (added / changed / deprecated / removed) and a migration note where one is needed. Subscribe to it from the developer dashboard.
Redirect URI exact match, PKCE verifier, mode of the client id
Payout not arriving
Payout account status and the threshold
Platform status
Live and historical incidents are on the status page linked from the developer dashboard. Subscribe there to be paged before your merchants notice.
Contacting us
Open a ticket from Support in the developer dashboard. Include the app number, the mode, the installation id and a request id from the logs — with those three we usually answer in one round trip.
Target first response: one business day; review questions are answered inside the review thread.
Deprecations
Breaking changes are announced at least 90 days ahead by email and in the changelog, with a migration note. Additive changes — new fields, new event types — ship without notice, so build tolerant parsers.