What are scopes?
Scopes define which /v1 endpoints an API key can call. In the dashboard, you choose a permission preset. BabySea then converts that preset into the route permissions enforced by the API.
When a key lacks the required scope for an endpoint, BabySea returns BSE1003.
Scope presets
When you create a key, the Permissions section shows these four presets:
Full Access
Dashboard description: All permissions - read, write, delete
| Scope | Included |
|---|
generation:write | Yes |
generation:read | Yes |
generation:delete | Yes |
account:read | Yes |
health:read | Yes |
library:read | Yes |
Generate Only
Dashboard description: Create & read generations + browse models
| Scope | Included |
|---|
generation:write | Yes |
generation:read | Yes |
generation:delete | No |
account:read | No |
health:read | No |
library:read | Yes |
Read Only
Dashboard description: Read generations, account info, health - no spending
| Scope | Included |
|---|
generation:write | No |
generation:read | Yes |
generation:delete | No |
account:read | Yes |
health:read | Yes |
library:read | Yes |
Monitor Only
Dashboard description: Health checks & model catalog - no account data
| Scope | Included |
|---|
generation:write | No |
generation:read | No |
generation:delete | No |
account:read | No |
health:read | Yes |
library:read | Yes |
Scope reference
Each scope maps to one or more API endpoints. Below is the complete mapping.
generation:write
Create new image and video generations.
| Method | Endpoint |
|---|
| POST | /v1/generate/image/{model_identifier} |
| POST | /v1/generate/video/{model_identifier} |
generation:read
Retrieve generation records and generation history.
| Method | Endpoint |
|---|
| GET | /v1/content/{generation_id} |
| GET | /v1/content/list |
generation:delete
Cancel in-progress generations and delete stored generation records.
| Method | Endpoint |
|---|
| DELETE | /v1/content/{generation_id} |
| POST | /v1/content/generation/cancel/{generation_id} |
account:read
Access account information, billing information, usage data, and key status checks.
| Method | Endpoint |
|---|
| GET | /v1/user/account |
| GET | /v1/user/billing |
| GET | /v1/usage |
| GET | /v1/status |
health:read
Check the health of inference providers, models, storage, and cache.
| Method | Endpoint |
|---|
| GET | /v1/health/inference/providers |
| GET | /v1/health/inference/models |
| GET | /v1/health/storage |
| GET | /v1/health/cache |
library:read
Browse the model and provider catalog, and request cost estimates.
| Method | Endpoint |
|---|
| GET | /v1/library/providers |
| GET | /v1/library/models |
| GET | /v1/estimate/{model_identifier} |
Choosing the right preset
| Use case | Recommended preset |
|---|
| Production API server | Full Access |
| Background worker | Generate Only |
| Internal analytics dashboard | Read Only |
| Uptime monitoring service | Monitor Only |
| CI/CD pipeline testing | Generate Only |
| Client side status widget | Monitor Only |
| Cost estimation tool | Read Only |
Start with the smallest preset that works for your application.
Change management
The current dashboard does not provide an edit action for key scopes.
If you need different permissions:
- Create a new key with the correct preset.
- Update your application to use the new key.
- Revoke or delete the old key when you are finished.
Rotation does not change scopes. It creates a replacement key with the same permissions as the original key.
Scope errors
When a key attempts to access an endpoint outside its permissions:
{
"status": "error",
"request_id": "req_a1b2c3d4",
"error": {
"code": "BSE1003",
"type": "insufficient_permissions",
"message": "API key does not have permission for this resource.",
"retryable": false
}
}
To resolve this error, create a new key with a preset that includes the required scope, or delete and recreate the existing key with broader permissions.
Scopes are set when the key is created. To use different scopes, create another key.