The Orenda API is one API. Some features are optional, and a few limits change from one
program to another. You don’t need to know anything about how a program is powered — you
just need to know what your program can do.
Ask the API:
It takes no parameters. Your program, your environment and your accounts all come from the
token. Call it once when your app starts and cache it for the session.
See the API reference for the full
schema.
Two halves, and why
program holds the capabilities that apply whatever account you use. accounts holds the
ones that depend on which account you’re operating on.
That split is not cosmetic. A single program can hold a UK account and an EU account served
by different banks, and those two accounts have genuinely different answers: different
reference limits, sometimes different rules for adding a payee. So:
Read the account entry for the account you’re about to use. Don’t read accounts[0] and
apply it to all of them.
What’s in there
Per program
stepUpMethods is the one field that reflects your session as well as your program. On a
program enrolled in passkey-only step-up, an SSO session is restricted to passkey, and the
list says so. Read it per session rather than caching it against the program.
Per account
What accounts contains
Every account you hold, across every customer on your token — so a guardian or corporate
manager sees all of them. Pending and closed accounts are omitted, matching what
GET /v1/accounts returns.
An empty accounts array always means you hold none. It is never a silent read failure, and
it is what you get on a token with no customer context; the program block is still valid.
This describes your program, not your user
Some endpoints are also restricted by the signed-in user’s role. payments.batch is the
one to watch: it tells you whether the program has batch payments, not whether this user
may use them. A user whose role doesn’t include batch access will still get a 403.Handle role-level 403s as you would any permission error — the capability document won’t
predict them.
Still worth knowing
A few things aren’t in the capability document:
- Currencies and rails. Call
GET /v1/payments/currencies
for the list.
- Payee details you send. Send what the payee’s account uses — an IBAN (sometimes with a
BIC), or a sort code and account number. The API checks you’ve sent the right ones.
501 not_available in general. Treat it as “this feature is off for me”, the same way
you’d treat a feature flag — not as an outage.
A good habit
Write your integration so it reacts to the data:
- Read
/v1/capabilities once at start-up, and branch on it instead of hard-coding.
- Look up the account entry for the account in hand.
- Read the fields that are present, instead of expecting a fixed shape.
Do that, and the same code works for every program with no special cases.