Skip to main content

OAuth Scopes

OAuth scopes define what permissions your application has when accessing FLTR on behalf of a user.

Available Scopes

Datasets

Documents

MCP (Model Context Protocol)

Webhooks

Account

Scope Combinations

Read-Only Access:
datasets:read mcp:query
For applications that only need to search existing datasets. Full Dataset Management:
datasets:read datasets:write documents:read documents:write mcp:query
For applications managing datasets and documents. Complete Access:
datasets:read datasets:write datasets:delete
documents:read documents:write documents:delete
mcp:query mcp:batch_query
webhooks:manage
account:read
For admin applications with full control.

Requesting Scopes

Authorization URL

https://www.tryfltr.com/oauth/authorize?
  response_type=code&
  client_id=YOUR_CLIENT_ID&
  scope=datasets:read mcp:query&
  state=RANDOM_STATE&
  code_challenge=CODE_CHALLENGE&
  code_challenge_method=S256
Important: Scopes must be space-separated in the URL.

Code Example

from urllib.parse import urlencode

scopes = [
    "datasets:read",
    "documents:write",
    "mcp:query"
]

params = {
    "response_type": "code",
    "client_id": "YOUR_CLIENT_ID",
    "scope": " ".join(scopes),  # Space-separated
    "state": state,
    "code_challenge": code_challenge,
    "code_challenge_method": "S256"
}

auth_url = f"https://www.tryfltr.com/oauth/authorize?{urlencode(params)}"

Scope Hierarchy

Some scopes require others:
datasets:delete
  └─ requires datasets:write
      └─ requires datasets:read

documents:delete
  └─ requires documents:read

mcp:batch_query
  └─ requires mcp:query
      └─ requires datasets:read
If you request datasets:delete, you automatically get datasets:write and datasets:read.

Checking Granted Scopes

After authentication, check which scopes were granted:
# Token response includes granted scopes
{
  "access_token": "fltr_at_abc123...",
  "scope": "datasets:read datasets:write mcp:query",
  "token_type": "Bearer",
  "expires_in": 3600
}
Note: Users can deny some scopes. Always check the scope field in the token response.

Scope Changes

Adding Scopes

To request additional scopes, redirect user through OAuth flow again with new scopes:
# Original scopes
original_scopes = "datasets:read mcp:query"

# Request additional scope
new_scopes = "datasets:read mcp:query webhooks:manage"

# User must re-authorize
redirect_to_authorization(scopes=new_scopes)

Revoking Scopes

Users can revoke scopes at any time in their account settings:
  1. Go to SettingsConnected Apps
  2. Click on your application
  3. Modify or revoke permissions
Your application will receive 403 Forbidden when using revoked scopes.

Error Handling

Insufficient Scope

{
  "error": "Insufficient permissions",
  "code": "insufficient_scope",
  "details": {
    "required_scope": "datasets:write",
    "granted_scopes": ["datasets:read", "mcp:query"]
  }
}
Solution: Request additional scopes from user.

Invalid Scope

{
  "error": "Invalid scope",
  "code": "invalid_scope",
  "details": {
    "invalid_scopes": ["datasets:admin"]
  }
}
Solution: Use valid scope names from this page.

Best Practices

Request Minimum Scopes

Only request scopes you actually need:
# ✅ Good - minimal scopes
scopes = "datasets:read mcp:query"

# ❌ Bad - requesting everything
scopes = "datasets:read datasets:write datasets:delete documents:read documents:write..."

Explain Why

Tell users why you need each scope:
This app needs:
- datasets:read - To view your knowledge bases
- mcp:query - To search your documents
- webhooks:manage - To notify you of updates

Handle Denials

Users may deny some scopes:
requested_scopes = {"datasets:read", "datasets:write", "mcp:query"}
granted_scopes = set(token_response["scope"].split())

denied_scopes = requested_scopes - granted_scopes

if denied_scopes:
    print(f"User denied: {denied_scopes}")
    # Degrade gracefully or explain why scopes are needed

Store Scope Information

Save which scopes were granted:
# Store with access token
{
    "access_token": "fltr_at_abc123...",
    "refresh_token": "fltr_rt_def456...",
    "scopes": ["datasets:read", "mcp:query"],
    "expires_at": 1704657600
}

Scope Reference Table

ScopeTypeDescriptionRequires
datasets:readReadView datasets-
datasets:writeWriteCreate/update datasetsdatasets:read
datasets:deleteDeleteDelete datasetsdatasets:write
documents:readReadView documents-
documents:writeWriteUpload documentsdocuments:read
documents:deleteDeleteDelete documentsdocuments:read
mcp:queryReadSearch datasetsdatasets:read
mcp:batch_queryReadBatch queriesmcp:query
webhooks:manageWriteManage webhooks-
account:readReadView account info-

Resources