OAuth Scopes

Scopes define what permissions your application is requesting from the user. Request only the scopes your application needs.

Available Scopes

Scope Description Recommended
offline_access Grants a refresh token for offline access ✅ Yes
payment_intent.inbound:read Read access to inbound payment intents (invoices) As needed
payment_intent.inbound:write Write access to inbound payment intents (invoices) As needed
payment_intent.outbound:read Read access to outbound payment intents (bills) As needed
payment_intent.outbound:write Write access to outbound payment intents (bills) As needed
contacts:read Read access to contacts As needed
contacts:write Write access to contacts As needed
transactions:read Read access to transaction history. Required alongside the payment intent scopes for every payment intent endpoint except list As needed
wallets:read Read access to the company's wallets (name, last four digits and whether the wallet is primary) As needed
company:read Read access to non-sensitive company info As needed
accounts:read Read Corex accounts, transactions, customer and account contact information, payment networks, and deposit statements Required for Corex

Every Corex endpoint requires accounts:read, including transactions and customer details. The Foundation transactions:read, contacts:read, and company:read scopes do not replace it. Ask Truss to enable Corex and approve accounts:read for your application before requesting it through OAuth.

Scopes by Endpoint

A request must carry every scope listed for its endpoint. Inbound and outbound scopes are separate: a token with only inbound scopes cannot call outbound endpoints, and the reverse.

Endpoint Required scopes
GET /v1/company/ company:read
GET /v1/contacts/, GET /v1/contacts/{uid}/ contacts:read
PATCH /v1/contacts/{uid}/ contacts:write
GET /v1/wallets/ wallets:read
GET /v1/payment-intents/inbound/ payment_intent.inbound:read
GET /v1/payment-intents/inbound/{uid}/ payment_intent.inbound:read transactions:read
POST /v1/payment-intents/inbound/, PATCH /v1/payment-intents/inbound/{uid}/, POST /v1/payment-intents/inbound/{uid}/cancel/ payment_intent.inbound:write transactions:read
GET /v1/payment-intents/outbound/ payment_intent.outbound:read
GET /v1/payment-intents/outbound/{uid}/ payment_intent.outbound:read transactions:read
POST /v1/payment-intents/outbound/, PATCH /v1/payment-intents/outbound/{uid}/, POST /v1/payment-intents/outbound/{uid}/cancel/ payment_intent.outbound:write transactions:read

wallets:read is only needed to list wallets. Choosing a wallet with wallet_uid on create does not require wallets:read, but still requires the payment intent write scope and transactions:read (see the create rows in the table above).

Requests without a required scope return 403.