{"openapi":"3.1.0","info":{"title":"POST /api/v1/firm/capital/fix-blockers","version":"1.0.0","description":"Create a to-do for each of a client's blockers"},"servers":[{"url":"https://api.ondayzero.com","description":"Production"}],"paths":{"/api/v1/firm/capital/fix-blockers":{"post":{"tags":["firm-capital"],"summary":"Create a to-do for each of a client's blockers","description":"Reads the client's blockers as they stand and leaves the caller one to-do per blocker on that client (source `firm_capital`); a blocker that already has an open to-do is skipped. `404` for a client outside the firm.","operationId":"fix_firm_client_blockers","parameters":[{"name":"firm_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The firm acting; defaults to the caller's staff firm.","title":"Firm Id"},"description":"The firm acting; defaults to the caller's staff firm."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirmCapitalFixBlockersRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope_FirmCapitalFixBlockersResponse_"}}}},"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"}}}},"404":{"description":"Not Found - Resource does not exist","content":{"application/json":{"example":{"error":"not_found","message":"Resource not found","code":"NOT_FOUND_001","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":"fix_firm_client_blockers_api_v1_firm_capital_fix_blockers_post"}}},"components":{"schemas":{"FirmCapitalBlocker":{"properties":{"code":{"type":"string","title":"Code","description":"Stable code (`bank_connection`, `scorecard:<key>`)."},"label":{"type":"string","title":"Label","description":"What to fix, in plain words."},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail","description":"Why it blocks, if known."},"fix_href":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fix Href","description":"In-app path where the fix is made, if there is one."}},"type":"object","required":["code","label"],"title":"FirmCapitalBlocker","description":"One thing standing between a client and an offer."},"FirmCapitalFixBlockersRequest":{"properties":{"business_id":{"type":"string","title":"Business Id","description":"The client's business."}},"additionalProperties":false,"type":"object","required":["business_id"],"title":"FirmCapitalFixBlockersRequest","description":"Leave a to-do for each of a client's blockers."},"FirmCapitalFixBlockersResponse":{"properties":{"created":{"items":{"$ref":"#/components/schemas/FirmCapitalTodo"},"type":"array","title":"Created","description":"To-dos created this call."},"already_open":{"type":"integer","title":"Already Open","description":"Blockers that already had an open to-do."},"blockers":{"items":{"$ref":"#/components/schemas/FirmCapitalBlocker"},"type":"array","title":"Blockers","description":"The client's blockers as read now."}},"type":"object","required":["already_open"],"title":"FirmCapitalFixBlockersResponse","description":"What Fix blockers did."},"FirmCapitalTodo":{"properties":{"todo_id":{"type":"string","title":"Todo Id","description":"The to-do."},"blocker_code":{"type":"string","title":"Blocker Code","description":"The blocker it is for."},"title":{"type":"string","title":"Title","description":"The to-do's title."}},"type":"object","required":["todo_id","blocker_code","title"],"title":"FirmCapitalTodo","description":"One to-do created for a blocker."},"SuccessEnvelope_FirmCapitalFixBlockersResponse_":{"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/FirmCapitalFixBlockersResponse"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"SuccessEnvelope[FirmCapitalFixBlockersResponse]"},"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":[]}]}