Skip to main content

Organizations & Bridging

The platform models a small ecosystem: one Central organization (the issuer) and the Commercial organizations (participant banks) it onboards. This is the second axis of access control alongside roles.

Organization types

OrganizationType has two values:

TypeWhoSees
CENTRALThe issuing central bankIssuer surfaces: full account presets, mint/burn, the Organizations admin tab
COMMERCIALParticipant banksParticipant surfaces: their own accounts, Send, Convert; no Organizations tab

An organization also has an OrganizationStatus (e.g. ACTIVE) and, for commercial orgs, an exchange address and a frozen flag that gate conversions.

Route-level org gating lives in the dashboard's ROUTE_ORG_TYPES and is mirrored server-side — e.g. GET /organizations rejects non-central callers with ORGANIZATION_LIST_RESTRICTED_TO_CENTRAL_BANK.

Managing organizations (Central only)

From Control Panel → Organizations, an administrator can create commercial orgs and open an org's detail page (/control-panel/organizations/$id). All organization mutations require the manage · Organization ability:

Control Panel Organizations tab listing commercial banks with exchange status The Organizations tab (Central only): each commercial bank with its status, exchange address, exchange status and per-row admin actions.

ActionEndpoint
List / view orgsGET /organizations, GET /organizations/:id
Create orgPOST /organizations
Update orgPATCH /organizations/:id
Invite org adminPOST /organizations/:id/admins/invite
Set exchange addressPOST /organizations/:id/exchange-address
Freeze / unfreezePOST /organizations/:id/freeze · /unfreeze
Per-org chain RPCPATCH /organizations/:id/chain-rpc, POST /organizations/:id/chain-rpc/test

Auditors in the central org can open these read-only (mutation affordances are hidden in-page).

Exchange address & freezing

A commercial org's exchange address is the on-chain account that conversions move value to/from. Setting it, and freezing/unfreezing it, are recorded as ADMIN operations. A frozen or unlinked exchange address blocks both disbursement and redemption.

Organization detail page with Exchange Address, Exchange Status toggle and Admin Access cards Org detail: the exchange address, the freeze/unfreeze toggle that gates conversions, and the org's admin roster.

Instant Payments settlement account

When a commercial organization is activated, the platform also auto-provisions its Instant Payments settlement ("ops") account — a single-key custody account, not a multisig — used to settle cross-bank retail payments. This happens automatically; there's no separate admin step.

Per-organization chain RPC

When PER_ORG_RPC_ENABLED=true, each organization can target its own chain RPC endpoint; the chain module resolves the right node per request via its RPC context. The endpoint can be validated with the chain-rpc/test call before saving.

Bridging — fiat ↔ CBDC

Conversions run against the BRIDGING account (a MultisigType.BRIDGING group) via the bridging module. Both endpoints require the manage · Bridging ability:

Bridging account group page showing the automated backend co-signer and weighted threshold The bridging group pairs the central admin with an automated "Bridging service" co-signer (the system identity), whose weight stays ≥ threshold so it can settle disbursements on its own.

  • Disbursement (fiat → CBDC) is signed by the system bridging identity (UserKind.BRIDGING), the only on-chain member of the bridging group besides the central admin — so for a single-signer bridging policy it executes instantly.
  • Redemption (CBDC → fiat) moves CBDC back to the bridging account and is balance-capped.

Each request emits a DisbursementRequestedEvent / RedemptionRequestedEvent and shows up in the activity log as a CHAIN operation. The conversion UX is the /convert flow described in Token Operations.

Bridging account detail with balance KPIs and disbursement activity The Bridging account detail: completed disbursements appear in its activity log as chain operations.