API overview
Authenticate REST requests with team API keys and manage upload projects programmatically.
The Bopbee public API lets you manage upload projects (static sites and viewer galleries) from scripts, CI, or AI assistants. GitHub-connected projects stay in the web app.
Base URL:
https://api.bopbee.com/v1Browse the interactive API reference by resource:
- Account:
GET /me - Projects: list, create, update, delete
- Uploads: multipart file upload
- Deployments: list, trigger, get status
- Domains: custom domains
The machine-readable OpenAPI contract is also available at https://api.bopbee.com/v1/openapi.json (auth required).
Fetch the raw OpenAPI JSON with the same Bearer key you use for other endpoints. Paths in the spec are prefixed with /v1/ while the server URL is https://api.bopbee.com: combine them correctly or use the base URL above with paths like /me and /projects.
Scope
- Included: upload projects: create, update, upload files, deploy, custom domains
- Excluded: GitHub repos, env vars, build settings, webhooks
Response field scope on GET /me is always upload_projects.
Create an API key
Open your team Settings → API (Pro or Studio plan).
Click New key and name it (for example Production CI).
Copy the key immediately. Only the prefix is stored server-side.
A key acts on one team. Keep it on your server: never in a browser or public repo. Revoke leaked keys from Settings → API.
Up to 10 active keys per team. Rename or revoke anytime. After a plan downgrade, existing keys can still be revoked but not created or renamed until you upgrade again.
Authenticate
curl https://api.bopbee.com/v1/me \
-H "Authorization: Bearer bb_live_your_key"GET /me returns team slug, plan, quotas, API key metadata, and request_id.
Pass an optional correlation id:
curl https://api.bopbee.com/v1/me \
-H "Authorization: Bearer bb_live_your_key" \
-H "X-Request-ID: my-trace-42"The same value is echoed in the JSON body and X-Request-ID response header.
Endpoint guides
- Projects: list, create, update, delete
- Uploads: multipart file upload
- Deployments: list, trigger, get status
- Domains: custom domains on upload projects
Errors
Failed requests return JSON:
{
"error": {
"code": "not_found",
"message": "Project not found."
},
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}Common codes:
| Code | HTTP | Meaning |
|---|---|---|
unauthorized | 401 | Missing or invalid API key |
forbidden | 403 | Plan gate, paused project, quota reached |
not_found | 404 | Unknown project, deployment, or domain |
validation_error | 422 | Invalid JSON or query parameters |
rate_limited | 429 | Too many requests: see Retry-After header |
domain_exists | 409 | Hostname already in use |
Quote request_id when contacting support.
Rate limits
Default limits (per rolling minute):
- 100 requests per API key
- 200 requests per client IP (before authentication)
- Upload endpoints have additional per-key and per-IP limits
When limited, the API returns 429 with Retry-After (seconds).
MCP server
See MCP server to expose the same API as tools in Cursor or Claude Desktop.