Developers · API reference

One API. Deterministic numbers.

Generated from qoyla.yaml (OpenAPI 3.1). Every money figure you read is tool-computed inside the customer’s bank, the API never estimates.

Try in the sandboxDownload the spec

Core endpoints

EndpointWhat it doesScope
GET /v1/safe-to-spendThe customer’s available-to-spend with its reason chain.money.read
GET /v1/plansActive money plans with funding state and pace.money.read
POST /v1/proposalsPropose an action, a transfer, a plan change, an offer claim. Never executes.propose
POST /v1/approvalsRecord the customer’s explicit approval of a proposal. This is the only path to execution.approve
GET /v1/records/{ref}Fetch a sealed record: reason → verification → action → outcome, signed.records.read
GET /v1/offers/matchOffers matched to spending intent, category signals only, never raw transactions.offers.read

Your first call

curl · sandbox

curl https://sandbox.api.qoyla.ai/v1/safe-to-spend \
  -H "Authorization: Bearer $QOYLA_SANDBOX_KEY" \
  -H "Qoyla-Customer: cus_test_tunde"

# → { "amount": "542430.46", "currency": "NGN",
#     "reasons": [ "rent reserved", "school fees reserved", ... ],
#     "record": "QRY-STS-8821" }

The contract behind every call

Consent is enforced server-sideA call outside the customer’s granted scopes returns 403 with the missing scope named, no silent data.403 + scope
Everything returns a record referenceReads and writes both, so any number you show can be traced to its proof.QRY-✳
Proposals never executeMoney moves only after POST /v1/approvals carries the customer’s explicit yes.approve-gated

Ready to call it for real?

Sandbox keys are free. Production access comes with FI or merchant partnership.