{"openapi":"3.1.0","info":{"title":"GET /api/v1/reconciliations/{reconciliation_id}/balance-report","version":"1.0.0","description":"Get statement-vs-books balance report"},"servers":[{"url":"https://api.ondayzero.com","description":"Production"}],"paths":{"/api/v1/reconciliations/{reconciliation_id}/balance-report":{"get":{"tags":["reconciliations"],"summary":"Get statement-vs-books balance report","description":"Tie the statement to the ledger for one reconciliation.\n\nReturns statement opening/closing, the ledger's book balance at the day\nbefore the period and at period end, ``difference_cents`` (statement\nclosing less ledger closing, null when the statement balances were not\ngiven) and the statement and ledger rows still without a committed match\n(500 each, ``truncated`` when more). All amounts are cents.","operationId":"get_reconciliation_balance_report","parameters":[{"name":"reconciliation_id","in":"path","required":true,"schema":{"type":"string","title":"Reconciliation Id"}},{"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_BalanceReportResponse_"}}}},"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"}}}},"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":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"unauthorized","message":"Authentication required","code":"AUTH_001","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"forbidden","message":"You don't have permission to access this resource","code":"AUTH_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"}}}}},"x-fastapi-operation-id":"get_reconciliation_balance_report_api_v1_reconciliations__reconciliation_id__balance_report_get"}}},"components":{"schemas":{"BalanceReportResponse":{"properties":{"reconciliation_id":{"type":"string","title":"Reconciliation Id"},"status":{"type":"string","title":"Status"},"ledger_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ledger Id"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"opening_statement":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Opening Statement"},"closing_statement":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Closing Statement"},"ledger_opening":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ledger Opening"},"ledger_closing":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ledger Closing"},"statement_net":{"type":"integer","title":"Statement Net"},"ledger_net":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ledger Net"},"difference_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Difference Cents"},"balanced":{"type":"boolean","title":"Balanced"},"balances_available":{"type":"boolean","title":"Balances Available"},"unmatched_statement_rows":{"items":{"$ref":"#/components/schemas/BalanceReportRow"},"type":"array","title":"Unmatched Statement Rows"},"unmatched_ledger_rows":{"items":{"$ref":"#/components/schemas/BalanceReportRow"},"type":"array","title":"Unmatched Ledger Rows"},"unmatched_statement_count":{"type":"integer","title":"Unmatched Statement Count"},"unmatched_ledger_count":{"type":"integer","title":"Unmatched Ledger Count"},"truncated":{"type":"boolean","title":"Truncated","default":false},"match_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Match Counts"}},"additionalProperties":true,"type":"object","required":["reconciliation_id","status","statement_net","balanced","balances_available","unmatched_statement_rows","unmatched_ledger_rows","unmatched_statement_count","unmatched_ledger_count","match_counts"],"title":"BalanceReportResponse","description":"Statement-vs-books tie-out for one reconciliation (amounts in cents)."},"BalanceReportRow":{"properties":{"id":{"type":"string","title":"Id"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"amount_cents":{"type":"integer","title":"Amount Cents"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["id","amount_cents"],"title":"BalanceReportRow","description":"One statement or ledger row still without a committed match."},"SuccessEnvelope_BalanceReportResponse_":{"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/BalanceReportResponse"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"SuccessEnvelope[BalanceReportResponse]"},"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":[]}]}