Skip to main content

API Reference

The Kora CBA API is a RESTful JSON API served over HTTPS. All services are accessed through a single API gateway.

Base URL

EnvironmentBase URL
Productionhttps://api.korastratum.com/api/v1/cba
Sandboxhttps://api.korastratum.com/api/v1/cba
info

Both environments use the same base URL. Your API key prefix determines the environment.

All paths are relative to the base URL. For example, GET /api/v1/accounts means:

GET https://api.korastratum.com/api/v1/cba/accounts

Required Headers

HeaderRequiredDescription
AuthorizationYesBearer <JWT_TOKEN>
X-Tenant-IDYesTenant UUID or code
Content-TypeFor POST/PUTapplication/json
Idempotency-KeyFor writesUnique key to prevent duplicate operations

Response Format

Success

{
"id": "resource-uuid",
"field": "value",
"created_at": "2026-02-28T10:00:00Z"
}

List endpoints return an array with pagination metadata:

{
"accounts": [ ... ],
"has_more": true,
"next_cursor": "eyJ0IjoiMjAyNi0wMi0yOCIsImlkIjoiYWNjdC11dWlkIn0="
}

Error

{
"code": "VALIDATION_ERROR",
"message": "Invalid format for field: account_id",
"details": [
{
"field": "account_id",
"reason": "Expected format: UUID",
"value": "invalid-id"
}
],
"request_id": "req-a1b2c3d4",
"timestamp": "2026-02-28T10:00:00Z",
"documentation_url": "https://docs.korastratum.com/cba/reference/error-codes"
}

See Error Codes for the full list.

Pagination

List endpoints use cursor-based pagination:

GET /api/v1/accounts?limit=20&cursor=eyJ0IjoiMjAyNi0wMi0yOCJ9
ParameterTypeDefaultMaxDescription
limitinteger50200Items per page
cursorstringOpaque cursor from next_cursor

Response includes:

FieldDescription
has_moretrue if more pages exist
next_cursorPass as cursor to fetch the next page
note

Cursor-based pagination is more efficient than offset-based for large datasets. Cursors are opaque — do not parse or construct them.

Idempotency

All write endpoints support idempotency. Include a unique Idempotency-Key header:

curl -X POST https://api.korastratum.com/api/v1/cba/transfers/internal \
-H "Idempotency-Key: txn-a1b2c3d4-e5f6" \
...
  • Same key + same body → returns the original response (no re-execution)
  • Same key + different body → 409 Conflict with code IDEMPOTENCY_CONFLICT
  • Keys expire after 24 hours

Rate Limit Headers

HeaderDescription
X-RateLimit-LimitMax requests per window
X-RateLimit-RemainingRequests remaining
X-RateLimit-ResetUnix timestamp when the window resets

See Rate Limits for per-endpoint quotas.

Request ID

Every response includes an X-Request-ID header. If you send an X-Request-ID in your request, it will be echoed back. Otherwise, one is generated automatically. Include this in support requests for tracing.

Service Routing

The API gateway routes requests to the appropriate microservice:

Path PrefixService
/api/v1/accounts, /api/v1/productsAccount Service
/api/v1/transfers, /api/v1/transactionsTransaction Service
/api/v1/journals, /api/v1/fiscal-periods, /api/v1/reportsGL Service
/api/v1/customersCustomer Service
/api/v1/loansLoan Service
/api/v1/cardsCard Service
/api/v1/fraud, /api/v1/screeningFraud Service
/api/v1/workflows, /api/v1/approvalsWorkflow Service
/api/v1/auditAudit Service

Next Steps