| API | Base URL | Purpose |
|---|---|---|
| Management API | https://nest.feather.mupeni.dev | CRUD for flags, environments, keys, proposals, analytics |
| Delivery API | https://fly.feather.mupeni.dev | Flag evaluation at the edge (used by SDKs) |
Versioning
All Management API endpoints are prefixed with/v1.
Authentication
Programmatic API requests require anAuthorization header:
Request format
Request bodies must be JSON withContent-Type: application/json.
Response format
All responses are JSON. Successful responses return the resource directly (not wrapped in adata key).
Error shape
Common error codes
| Code | Status | Description |
|---|---|---|
UNAUTHORIZED | 401 | Missing Authorization header |
INVALID_API_KEY | 401 | API key is invalid or has been revoked |
CSRF_MISSING_ORIGIN | 403 | CSRF header absent on session request |
CSRF_ORIGIN_MISMATCH | 403 | CSRF origin header doesn’t match |
UPGRADE_REQUIRED | 403 | Feature requires a higher plan |
LIMIT_EXCEEDED | 403 | Monthly evaluation limit reached |
PROTECTED_ENVIRONMENT | 403 | Environment requires a change proposal |
SELF_APPROVAL_FORBIDDEN | 403 | Proposer cannot approve their own proposal |
RESOURCE_NOT_FOUND | 404 | Resource does not exist or is not in your org |
CONFLICT | 409 | Duplicate slug/key, or proposal state conflict |
PROPOSAL_ALREADY_PENDING | 409 | A pending proposal already exists for this flag+env |
PROPOSAL_NOT_PENDING | 409 | Proposal is not in pending state |
IMMUTABLE_FIELD | 422 | Attempted to update an immutable field |
VALIDATION_ERROR | 422 | Request body failed validation |
Pagination
Endpoints that return lists use cursor-based pagination:- Pass
cursor(an opaque timestamp) to fetch the next page. - Pass
limit(1–100, default 50) to control page size. - The response includes
nextCursor(null when no more pages) andhasMore.
Partial success (207)
Some write endpoints return207 Multi-Status when the primary operation succeeded but an edge cache sync failed. The response body includes a syncWarning field describing the failure.
207 as a success for the primary resource, but alert on syncWarning — evaluations may serve stale data until the next sync. Use Trigger Sync to force a retry.