Two live routes are absent from api/openapi.yaml, so nothing generates SDKs for them and the contract test cannot catch a break.
Current behaviour
Neither path appears in the spec:
/v1/webhooks (GET, POST) — 0 matches in api/openapi.yaml
/v1/admin/contracts (GET, POST, DELETE) — 0 matches
Both are implemented and routed in services/api/main.go.
Why this matters now
GET /v1/webhooks recently changed from returning a bare JSON array to an enveloped object ({webhooks, has_more, next_cursor}) as part of the #220 pagination work. That is a breaking change for every existing client, and because the route is undocumented:
- no SDK model exists for it in any of the five SDKs,
TestLiveOpenAPIContract cannot detect the change,
- the break reaches users before it reaches CI.
This is the exact gap #421 and #232 describe, scoped to the two routes that are actually missing.
Scope
- Document both paths with their real request/response schemas and status codes.
- Regenerate SDK models so the envelope is represented.
- Confirm the contract test covers them once documented.
Done when
- Both routes are in the spec and exercised by the OpenAPI contract test.
Two live routes are absent from
api/openapi.yaml, so nothing generates SDKs for them and the contract test cannot catch a break.Current behaviour
Neither path appears in the spec:
/v1/webhooks(GET, POST) — 0 matches inapi/openapi.yaml/v1/admin/contracts(GET, POST, DELETE) — 0 matchesBoth are implemented and routed in
services/api/main.go.Why this matters now
GET /v1/webhooksrecently changed from returning a bare JSON array to an enveloped object ({webhooks, has_more, next_cursor}) as part of the #220 pagination work. That is a breaking change for every existing client, and because the route is undocumented:TestLiveOpenAPIContractcannot detect the change,This is the exact gap #421 and #232 describe, scoped to the two routes that are actually missing.
Scope
Done when