Why segregate access
When several customers call your platform, one shared credential gives each of them the access of all of them. Partners replace that with one set of limits per customer:
- Least privilege. Each partner gets only the actions and the data it needs, and nothing above what your own team can do.
- Credentials per partner. Each partner holds its own credentials. You can revoke one partner without touching the others.
- Immediate revocation. Suspending a partner, or reaching the end of its validity window, refuses its next request, even with a token it already holds.
- Network restriction. A partner can call only from the addresses you list for it.
- Validity windows. Access can start and end on dates you choose. A pilot that ends on a date needs no reminder to switch off.
- Clear accountability. Each request carries the partner’s own credential, so every action traces back to one partner.
The building blocks
A tenant holds organizations, and an organization holds ledgers. A partner is a record of the tenant, and the rows after it describe what a partner gets.
How the pieces fit together
The tenant is a hard boundary. Data in your staging tenant never mixes with data in your production tenant. Inside a tenant, organizations and ledgers separate your data logically: Access Manager uses the scope of each partner to keep each partner inside its own part.
- Tenant: Production. Your staging tenant is a separate one.
- Organization North
- Ledger N1. Partner A writes accounts and transactions here.
- Ledger N2
- Accounts 1 and 2. Partner C reads only these two accounts.
- Organization South. Partner B reads the whole organization, for 90 days.
- Ledger S1
- Ledger S2
- Organization North
Example: three partners in one tenant
Your company runs one tenant per environment. The production tenant holds two Midaz organizations, North and South. Three of your customers need API access.
Partner A: writes in one ledger, from one address
You also cannot give Partner A the right to create ledgers. Creating a ledger acts on the whole organization, which is wider than one ledger. Access Manager refuses that change with
IDE-1056, and the Console shows the line as “Outside the scope”.
Partner B: reads a whole organization for 90 days
Partner C: reads two accounts, then gets suspended
How a request is decided
The checks below run on every request that a partner’s credential sends to a product. They run in this order, and the first one that fails stops the request.
- Token. The partner’s system exchanges its client ID and client secret for an access token, and sends the token with the request.
- Partner. Access Manager finds the partner that the credential belongs to.
- Network address. Access Manager compares the caller’s address with the partner’s own list. A partner without a list of its own uses your tenant’s list. A refusal returns
403withAUT-0021. - State and validity. A suspended partner, or one outside its validity window, is refused with
401:AUT-1009for suspended,AUT-1010for outside the window. - Permissions. The product, the resource, and the action must be in the partner’s permissions. A refusal returns
403. - Scope. The organization, ledger, account, or other item that the request names must be inside the partner’s scope. A refusal returns
403. - If every check passes, the product runs the request.
403, so a partner cannot use refusals to find out which items exist outside its scope.
What you need to know
- Permissions and scope must both match. A partner reaches only what both allow. Permissions without scope on a product with a required restriction cannot be saved.
- Suspension and the end of the validity window apply at once. The partner’s next request is refused, even with a token it already holds. A suspended partner also cannot get new tokens.
- Every other change applies from the next request. That includes new permissions, a narrower scope, and a new IP allowlist.
- A partner never gets more than your tenant has. The ceiling is what the product’s editor role holds in your tenant. If that role later loses a permission, the partner loses it too.
- Access Manager does not check that scope IDs exist in the product. It stores the IDs you enter. Copy them from the product’s own API or Console.
- A product shown as “not ready for partners” has not published its list of restrictions yet. You cannot give a partner access to that product until it does.
- A request that leaves out an item the scope restricts is refused. For example, a partner restricted to some ledgers cannot list all the ledgers of the organization.
- A partner with applications cannot be deleted. Delete its applications first. To pause a partner instead, suspend it. Suspension is reversible; deletion is not.
- A partner’s own IP allowlist replaces your tenant’s list. It does not add to it. An address that is only on your tenant’s list does not work for that partner. The partner’s list applies even when your tenant’s list is off.
Products that accept partners
Each product declares, in its permission manifest, which restrictions it accepts: for example organization, ledger, account, portfolio, or segment. Today Midaz (the ledger) and Tracer accept partners. Midaz requires one organization for every partner and accepts optional restrictions on ledgers, accounts, account aliases, assets, portfolios, segments, holders, and other items. Tracer accepts optional restrictions on rules, limits, transaction validations, accounts, portfolios, segments, and merchants.
Next steps
Manage partners in the Console
Create a partner step by step, issue its credentials, suspend it, or delete it.
Manage partners via API
The partner operations, their fields, examples, and error codes.
IP allowlist
The tenant list that a partner without a list of its own uses.
Error list
Every code Access Manager can return.

