Skip to main content

Permissions & Scopes

The COPA API uses a scope-based permission system. Each API key is granted specific scopes that control what data it can access.

How Permissions Work

Request → Authentication → Scope Check → Rate Limiting → Response
↓ ↓
Valid API key? Has required scope?
↓ ↓
401 Unauthorized 403 Forbidden

Every endpoint requires a specific scope. If your API key doesn't have the required scope, you'll receive a 403 Forbidden error.

Available Scopes

ScopePermissionEndpoints
cooperatives:readRead cooperative dataGET /cooperatives, GET /cooperatives/{id}
cooperatives:writeCreate/update cooperativesPOST /cooperatives, PUT /cooperatives/{id}
members:readRead member dataGET /members, GET /members/{id}, GET /cooperatives/{id}/members
members:writeCreate/update membersPOST /members, PUT /members/{id}
loans:readRead loan dataGET /loans (coming soon)
loans:writeCreate/update loansPOST /loans (coming soon)
payments:readRead payment dataGET /payments (coming soon)
payments:writeCreate/update paymentsPOST /payments (coming soon)
webhooks:receiveReceive webhook eventsWebhook endpoints

Endpoint Scope Requirements

MethodEndpointRequired Scope
GET/cooperativescooperatives:read
GET/cooperatives/{id}cooperatives:read
GET/cooperatives/{id}/membersmembers:read
GET/membersmembers:read
GET/members/{id}members:read

Permission Errors

When your API key lacks the required scope:

HTTP Status: 403 Forbidden

Response:

{
"detail": "You do not have permission to perform this action."
}

Example: Scope Enforcement

# API key with only cooperatives:read scope

# ✅ This works
curl -H "Authorization: Bearer sk_copa_partner_xxx" \
https://api.copa.rw/api/v1/cooperatives

# ❌ This fails (needs members:read)
curl -H "Authorization: Bearer sk_copa_partner_xxx" \
https://api.copa.rw/api/v1/members
# Response: {"detail": "You do not have permission to perform this action."}

Requesting Scopes

When requesting an API key, specify which scopes you need:

Common Use Cases

Use CaseRecommended Scopes
Read-only integrationcooperatives:read, members:read
Cooperative managementcooperatives:read, cooperatives:write
Member managementmembers:read, members:write
Full accessAll scopes (rarely needed)
Best Practice

Request only the scopes you need. This follows the principle of least privilege and improves security.

Checking Your Scopes

Your API key's scopes are configured when the key is created. To check or modify your scopes, contact the COPA team at partners@copa.rw.

Additional Security Features

Beyond scopes, API keys can have additional restrictions:

FeatureDescription
IP AllowlistRestrict API key to specific IP addresses
Host AllowlistRestrict API key to specific domains
Rate LimitsCustom request limits per hour/day
Active/InactiveKeys can be disabled instantly

These restrictions are configured by the COPA team when your API key is created.

Next Steps