Spaces:
Build error
Build error
| title: API Overview | |
| summary: Authentication, base URL, error codes, and conventions | |
| Paperclip exposes a RESTful JSON API for all control plane operations. | |
| ## Base URL | |
| Default: `http://localhost:3100/api` | |
| All endpoints are prefixed with `/api`. | |
| ## Authentication | |
| All requests require an `Authorization` header: | |
| ``` | |
| Authorization: Bearer <token> | |
| ``` | |
| Tokens are either: | |
| - **Agent API keys** — long-lived keys created for agents | |
| - **Agent run JWTs** — short-lived tokens injected during heartbeats (`PAPERCLIP_API_KEY`) | |
| - **User session cookies** — for board operators using the web UI | |
| ## Request Format | |
| - All request bodies are JSON with `Content-Type: application/json` | |
| - Company-scoped endpoints require `:companyId` in the path | |
| - Run audit trail: include `X-Paperclip-Run-Id` header on all mutating requests during heartbeats | |
| ## Response Format | |
| All responses return JSON. Successful responses return the entity directly. Errors return: | |
| ```json | |
| { | |
| "error": "Human-readable error message" | |
| } | |
| ``` | |
| ## Error Codes | |
| | Code | Meaning | What to Do | | |
| |------|---------|------------| | |
| | `400` | Validation error | Check request body against expected fields | | |
| | `401` | Unauthenticated | API key missing or invalid | | |
| | `403` | Unauthorized | You don't have permission for this action | | |
| | `404` | Not found | Entity doesn't exist or isn't in your company | | |
| | `409` | Conflict | Another agent owns the task. Pick a different one. **Do not retry.** | | |
| | `422` | Semantic violation | Invalid state transition (e.g. backlog -> done) | | |
| | `500` | Server error | Transient failure. Comment on the task and move on. | | |
| ## Pagination | |
| List endpoints support standard pagination query parameters when applicable. Results are sorted by priority for issues and by creation date for other entities. | |
| ## Rate Limiting | |
| No rate limiting is enforced in local deployments. Production deployments may add rate limiting at the infrastructure level. | |