openapi: 3.0.3 info: title: Okra API (Historical) Accounts Balance API description: RETIRED. Okra was an open finance / open banking infrastructure API for Africa (Nigeria). This OpenAPI documents the historical, now-discontinued REST surface. Okra ceased operations in May 2025 and the host api.okra.ng no longer resolves; the paths and Bearer-secret auth below are CONFIRMED from Okra's official okraHQ/okra-node SDK, but request/response body schemas are MODELED (reconstructed from SDK parameter models and archived documentation) and are illustrative rather than authoritative. Reads and writes alike used POST with a JSON filter body. Account linking happened client-side through the Okra Widget, producing the `record`/`customer` identifiers that data endpoints operate against. version: '2.0' contact: name: Okra (defunct) url: https://okra.ng x-status: retired x-ceased-operations: 2025-05 x-grounding: Endpoint paths, base URL, and Bearer-secret auth confirmed from github.com/okraHQ/okra-node (archived 2024-02-09). Body schemas modeled. servers: - url: https://api.okra.ng/v2 description: Production (retired - no longer resolves) - url: https://api.okra.ng/v2/sandbox description: Sandbox (retired - no longer resolves) security: - okraSecret: [] tags: - name: Balance description: Real-time and cached account balances. paths: /balance/check: post: operationId: checkBalance tags: - Balance summary: Check real-time balance description: Returns a live balance for a linked account. requestBody: $ref: '#/components/requestBodies/AccountFilter' responses: '200': $ref: '#/components/responses/OkraData' '401': $ref: '#/components/responses/Unauthorized' /balance/refresh: post: operationId: refreshBalance tags: - Balance summary: Refresh balance requestBody: $ref: '#/components/requestBodies/AccountFilter' responses: '200': $ref: '#/components/responses/OkraData' '401': $ref: '#/components/responses/Unauthorized' components: responses: Unauthorized: description: Missing or invalid Okra Secret. content: application/json: schema: $ref: '#/components/schemas/OkraEnvelope' OkraData: description: MODELED. Okra responses were JSON envelopes of the form {status, message, data}. The exact `data` shape varied per product and is not reproduced authoritatively here. content: application/json: schema: $ref: '#/components/schemas/OkraEnvelope' schemas: AccountFilter: type: object description: Modeled. Account-scoped filter. properties: account_id: type: string customer: type: string additionalProperties: true OkraEnvelope: type: object description: Modeled Okra response envelope. properties: status: type: string example: success message: type: string data: type: object additionalProperties: true additionalProperties: true requestBodies: AccountFilter: description: Modeled account-scoped filter body. required: true content: application/json: schema: $ref: '#/components/schemas/AccountFilter' securitySchemes: okraSecret: type: http scheme: bearer description: 'Okra Secret key issued in the Okra dashboard, sent as `Authorization: Bearer `. Confirmed from okraHQ/okra-node.'