{"openapi":"3.1.0","info":{"title":"GET /api/v1/credit/readiness","version":"1.0.0","description":"Launch readiness of every program"},"servers":[{"url":"https://api.ondayzero.com","description":"Production"}],"paths":{"/api/v1/credit/readiness":{"get":{"tags":["credit"],"summary":"Launch readiness of every program","description":"Every program on the business, newest first, each with its launch checks evaluated now. Nothing is stored. Each check carries `key`, `area`, `status` (pass, warn, fail, not_applicable), `blocking`, `summary`, `detail`, `subjects` and `resolve` (`kind` console, api or staff, and its `target`). `ready` is true when no blocking check fails.","operationId":"credit_readiness_list","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Programs per page.","default":20,"title":"Limit"},"description":"Programs per page."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`next_cursor` of the last page.","title":"Cursor"},"description":"`next_cursor` of the last page."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-business-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Business-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope_ReadinessPage_"}}}},"400":{"description":"Bad Request - Invalid input","content":{"application/json":{"example":{"error":"validation_error","message":"Validation failed: due_date: Input should be a valid date","errors":{"due_date":"Input should be a valid date"},"code":"GEN_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Missing or expired token, an MCP OAuth token used against the REST API, or no access to this business","content":{"application/json":{"example":{"error":"unauthorized","message":"Authentication required","code":"AUTH_001","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"example":{"error":"forbidden","message":"You don't have permission to access this resource","code":"AUTH_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"validation_error","message":"Validation failed: amount: Input should be a valid integer","errors":{"amount":"Input should be a valid integer"},"code":"GEN_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"}}}}},"x-fastapi-operation-id":"credit_readiness_list_api_v1_credit_readiness_get"}}},"components":{"schemas":{"ReadinessCheck":{"properties":{"key":{"type":"string","title":"Key","description":"Stable identifier, e.g. `identity.lender`."},"area":{"type":"string","enum":["policy","identity","merchants","cards","events","controls","books","sandbox","access","migration","operations","compliance"],"title":"Area","description":"The part of the launch it covers."},"status":{"type":"string","enum":["pass","warn","fail","not_applicable"],"title":"Status","description":"pass, warn (worth a look, never stops activation), fail, or not_applicable (the program does not use what it checks)."},"blocking":{"type":"boolean","title":"Blocking","description":"A failing blocking check stops the program being made active unless an operator forces it."},"summary":{"type":"string","title":"Summary","description":"One sentence on what the check found."},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail","description":"More on what was found, or the error when the check could not run."},"subjects":{"items":{"type":"string"},"type":"array","title":"Subjects","description":"What the finding is about: line ids, missing fields, templates, endpoints. At most 20."},"resolve":{"anyOf":[{"$ref":"#/components/schemas/ReadinessResolve"},{"type":"null"}],"description":"What resolves it. Null when it passes."}},"type":"object","required":["key","area","status","blocking","summary"],"title":"ReadinessCheck","description":"One launch check and what it found."},"ReadinessCounts":{"properties":{"passed":{"type":"integer","title":"Passed","description":"Checks that pass.","default":0},"warnings":{"type":"integer","title":"Warnings","description":"Checks that warn.","default":0},"failures":{"type":"integer","title":"Failures","description":"Checks that fail, blocking or not.","default":0},"not_applicable":{"type":"integer","title":"Not Applicable","description":"Checks the program does not need.","default":0},"blocking_failures":{"type":"integer","title":"Blocking Failures","description":"Failing checks that stop activation.","default":0}},"type":"object","title":"ReadinessCounts","description":"How the checks came out."},"ReadinessPage":{"properties":{"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Pass back as `cursor` for the next page. Null on the last."},"has_next":{"type":"boolean","title":"Has Next","description":"Another page follows. Looked up one row past the page, so a full last page is not reported as more.","default":false},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"The page size the list was read with."},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Row count; present only with `include_total_count=true`."},"items":{"items":{"$ref":"#/components/schemas/ReadinessReport"},"type":"array","title":"Items","description":"One report per program."}},"type":"object","title":"ReadinessPage","description":"Launch readiness of every program on the business, newest program first."},"ReadinessReport":{"properties":{"business_id":{"type":"string","title":"Business Id","description":"The operator business."},"program_id":{"type":"string","title":"Program Id","description":"The program evaluated."},"program_name":{"type":"string","title":"Program Name","description":"Its display name."},"program_status":{"type":"string","title":"Program Status","description":"draft, active, paused or retired."},"sandbox":{"type":"boolean","title":"Sandbox","description":"True when the business is a sandbox."},"evaluated_at":{"type":"string","format":"date-time","title":"Evaluated At","description":"When the checks ran (UTC)."},"ready":{"type":"boolean","title":"Ready","description":"No blocking check fails."},"counts":{"$ref":"#/components/schemas/ReadinessCounts"},"checks":{"items":{"$ref":"#/components/schemas/ReadinessCheck"},"type":"array","title":"Checks","description":"Every check, in area order."},"activation_override":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Activation Override","description":"The last time an operator forced the program active past failing checks: forced_by, forced_at, reason, failing_checks."},"result_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Id","description":"The stored result's id, when this evaluation was stored."},"source":{"anyOf":[{"type":"string","enum":["sweep","manual"]},{"type":"null"}],"title":"Source","description":"sweep or manual, when this evaluation was stored."}},"type":"object","required":["business_id","program_id","program_name","program_status","sandbox","evaluated_at","ready","counts"],"title":"ReadinessReport","description":"A program's launch readiness."},"ReadinessResolve":{"properties":{"kind":{"type":"string","enum":["console","api","staff"],"title":"Kind","description":"console: a screen in the DayZero console (`target` is its path). api: a call (`target` is the method, path and body). staff: ask DayZero (`target` says what to ask for)."},"target":{"type":"string","title":"Target","description":"The console path, the API call, or the request to staff."},"label":{"type":"string","title":"Label","description":"A short name for the action, for a button."}},"type":"object","required":["kind","target","label"],"title":"ReadinessResolve","description":"What resolves a check that does not pass."},"SuccessEnvelope_ReadinessPage_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/ReadinessPage"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"SuccessEnvelope[ReadinessPage]"},"ErrorResponse":{"title":"ErrorResponse","type":"object","description":"Envelope returned by every non-2xx response. Branch on `code` (stable) rather than `message` (human-readable, may change).","required":["error","message","code"],"properties":{"error":{"type":"string","description":"Error category: `validation_error`, `unauthorized`, `forbidden`, `not_found`, `conflict`, `rate_limited`, `server_error`, or `service_unavailable`."},"message":{"type":"string","description":"Human-readable explanation, safe to show to end users."},"code":{"type":"string","description":"Stable machine-readable code in `CATEGORY_NNN` form (e.g. `NOT_FOUND_006`, `AUTH_010`, `GEN_002`)."},"request_id":{"type":"string","description":"Correlation id for support requests. Echoes the `x-request-id` request header when one was supplied."},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Field-level validation messages keyed by field name. Present on 400/422 validation failures only."}}}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Token","description":"API token authentication. Format: `Bearer dz_...`"}}},"security":[{"BearerAuth":[]}]}