API Changelog
C.O.S. API v1
All notable changes to the C.O.S. API contract are documented here. This changelog covers the public API surface only. Internal implementation changes are recorded in the C.O.S. governance log (INSTALL_LOG.md).
v1-stable — 2026-06-10
Status: Active. This is the current production version.
Frozen at Gate 58-5A (CAND-2026-147)
The C.O.S. Public API spec (COS_PUBLIC_API_SPEC.yaml) was frozen at
Gate 58-5A on 2026-06-10. No breaking changes are permitted against this
frozen contract. All subsequent gate work targets implementation conformance
and developer tooling.
Endpoints
GET /health— service health check (unauthenticated)GET /version— API version info (unauthenticated)GET /organisations— list organisations (platform key required)POST /organisations— create organisation (platform key required)GET /organisations/{id}— get organisationPUT /organisations/{id}— full updatePATCH /organisations/{id}— partial updateGET /organisations/{id}/members— list membersGET /organisations/{id}/api-keys— list API keysPOST /organisations/{id}/api-keys— issue API keyGET /organisations/{id}/api-keys/{key_id}— get key recordDELETE /organisations/{id}/api-keys/{key_id}— revoke key
Authentication
API keys use the format cos_live_<48 chars> (production) or
cos_test_<48 chars> (test). Keys are org-scoped. Both prefixes are
registered with GitHub secret scanning.
Rate limiting
- Authenticated: 60 requests/minute per organisation (fixed-window, per-org).
- Unauthenticated (
/health,/version): 60 requests/minute global. Added at Gate 59-2 (CAND-2026-151, 2026-06-10). 429responses use RFC 7807 Problem Details (application/problem+json) withcos_error_code: RATE_LIMIT_EXCEEDEDandretry_afterfield.- Redis fail-open: limits are unenforced during Redis unavailability.
Error format
- All errors except
429:application/jsonwitherror,message,details. 429:application/problem+json(RFC 7807) withtype,title,status,detail,cos_error_code,retry_after,instance.
Known implementation limitations
| ID | Severity | Description |
|---|---|---|
| BUG-005 | LOW | Unauthenticated rate limit is global-only; no per-IP limit. Phase 60 deadline. |
| BUG-006 | MEDIUM | CLOSED (CAND-2026-155, 2026-06-10). cos_app INSERT GRANT was already present on cos_governance_events; register was not updated when fix was applied. Confirmed resolved. |
Pre-stable history
API development history prior to v1-stable is preserved in the C.O.S. governance
archive (09_archive/). The stable contract freeze at Gate 58-5A supersedes
all prior draft versions.