apps/website/src/app/docs/content/oauth-scopes.mdx
Scopes define what data and actions your OAuth application can access. Request only the scopes your app needs—users are more likely to authorize apps with limited, focused permissions.
Scopes follow the pattern resource.permission:
transactions.read — Read transaction datainvoices.write — Create, update, delete invoices| Scope | Description |
|---|---|
transactions.read | View transactions, categories, and attachments |
transactions.write | Update transaction categories, notes, and attachments |
Use cases: Financial dashboards, expense tracking, receipt management
| Scope | Description |
|---|---|
invoices.read | View invoices and their status |
invoices.write | Create, update, send, and delete invoices |
Use cases: Invoice automation, payment reminders, accounting sync
| Scope | Description |
|---|---|
customers.read | View customer information |
customers.write | Create, update, and delete customers |
Use cases: CRM integration, customer portals, contact sync
| Scope | Description |
|---|---|
bank-accounts.read | View connected bank accounts and balances |
bank-accounts.write | Manage bank account settings |
Use cases: Cash position monitoring, balance alerts
| Scope | Description |
|---|---|
documents.read | View documents in the vault |
documents.write | Upload and organize documents |
Use cases: Document management, backup tools, OCR integrations
| Scope | Description |
|---|---|
inbox.read | View inbox items (uploaded receipts, pending matches) |
inbox.write | Process and match inbox items |
Use cases: Receipt processing, automated matching
| Scope | Description |
|---|---|
tracker-projects.read | View time tracking projects |
tracker-projects.write | Create, update, and delete projects |
Use cases: Project management integration, resource planning
| Scope | Description |
|---|---|
tracker-entries.read | View time entries |
tracker-entries.write | Create, update, and delete time entries |
Use cases: Time tracking apps, timesheets, billing automation
| Scope | Description |
|---|---|
teams.read | View team information and settings |
teams.write | Update team settings |
Use cases: Team management, onboarding tools
| Scope | Description |
|---|---|
users.read | View user information within the team |
users.write | Update user settings |
Use cases: User management, access control
| Scope | Description |
|---|---|
tags.read | View tags used for organizing data |
tags.write | Create, update, and delete tags |
Use cases: Custom categorization, workflow automation
| Scope | Description |
|---|---|
reports.read | Access financial reports (revenue, profit, runway, burn rate) |
Use cases: Financial dashboards, investor updates, forecasting
| Scope | Description |
|---|---|
search.read | Search across all data |
Use cases: Global search, data discovery tools
| Scope | Description |
|---|---|
notifications.read | View notifications |
notifications.write | Mark notifications as read, manage settings |
Use cases: Notification aggregators, alert systems
For apps that need broad access, meta scopes provide convenient shortcuts:
| Scope | Description |
|---|---|
apis.read | Read-only access to all resources |
apis.all | Full read and write access to all resources |
Use meta scopes sparingly. Most apps should request specific scopes.
Include scopes in the authorization URL as a space-separated list:
https://app.midday.ai/oauth/authorize?
response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=YOUR_REDIRECT_URI&
scope=transactions.read%20invoices.read%20customers.read&
state=STATE
URL-encode the scope parameter (spaces become %20).
When users authorize your app:
If you need additional scopes later, users must re-authorize your app.
transactions.read invoices.read bank-accounts.read reports.read
invoices.read invoices.write customers.read customers.write
tracker-projects.read tracker-projects.write tracker-entries.read tracker-entries.write
transactions.read invoices.read customers.read documents.read
apis.read
Only request what you need. Users trust apps that ask for limited permissions.
Good: transactions.read for a spending tracker
Avoid: apis.all when you only need to read transactions
If your app only displays data, don't request write scopes:
transactions.read invoices.read
If you need invoices, you likely need customers too:
invoices.read invoices.write customers.read
Tell users why you need each scope in your app's description or onboarding flow.
The token response includes the granted scopes:
{
"access_token": "mid_at_xxxxx",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "mid_rt_xxxxx",
"scope": "transactions.read invoices.read"
}
Check this against your requested scopes to confirm what was granted.