Same routes, your own key
A Sub-Platform calls the same product routes as its fintech, with its own key.
A Sub-Platform has no routes of its own. Its business calls the same product routes as the
fintech, with its own key (X-API-Key: oc_live_…, the key of the Sub-Platform account). The
key decides the scope: with a Sub-Platform key, a route only sees the Sub-Platform's payments
module (its payment requests, ramp links, settings and webhooks). A path that is not open to a
Sub-Platform key answers 404 with code ROUTE_NOT_AVAILABLE_FOR_SUB_PLATFORM_KEY; it never falls
back to the fintech's data.
/api/connect/sub-platforms is only for the fintech that manages its Sub-Platforms (list, create,
/{id}, keys, provision, onboarding). POST /api/connect/sub-platforms creates the Sub-Platform
and its payments module.
Routes a Sub-Platform key uses
| Product | Method | Path | Purpose |
|---|---|---|---|
| Connect Treasury | POST | /api/connect/treasury/payment-requests/core | Create a payment request. |
| GET | /api/connect/treasury/payment-requests/core/{id} | Read a payment request. | |
| POST | /api/connect/treasury/payment-requests/core/{id}/cancel | Cancel it (204). | |
| GET | /api/connect/treasury/accounts/core/accounts | Accounts and balances of the Sub-Platform. | |
| GET | /api/connect/treasury/accounts/core/accounts/{label_key}, /funding, /transactions | One account, its funding instructions, its transactions. | |
| GET · POST | /api/connect/treasury/accounts/core/transactions, /transactions/{id} | Account transactions. | |
| POST | /api/connect/treasury/accounts/core/transfers | Transfer from one of its accounts (sender.account). | |
| POST | /api/connect/treasury/accounts/core/onramp/fiat, /offramp/fiat | Fiat in / out of its accounts. | |
| GET | /api/connect/treasury/accounts/protocol/accounts, /accounts/{label_key}/funding | Dashboard view of its accounts. | |
| Connect Ramp | POST · GET | /api/connect/ramp/core/links | Create and list ramp links. |
| GET · PATCH · DELETE | /api/connect/ramp/core/links/{id} | Read, update, delete a ramp link. | |
| GET | /api/connect/ramp/core/operations | Ramp operations of the Sub-Platform. | |
| POST | /api/connect/ramp/core/embed-token | Token for the embedded ramp. | |
| GET · PUT | /api/connect/ramp/settings | Ramp settings: what it inherits, its overrides, the effective result. | |
| Connect Commerce | GET · PATCH | /api/connect/commerce/payment-methods | Payment methods offered on its portal. |
| GET · PATCH | /api/connect/commerce/checkout/protocol/checkout-settings, /order-prep-settings | Checkout page and order preparation settings. | |
| GET · POST · PATCH · DELETE | /api/connect/commerce/checkout/protocol/promo-codes, /promo-codes/{id}, /validate, /consume | Promo codes. | |
| GET · POST | /api/connect/commerce/checkout/protocol/qr/static, /qr/dynamic, /qr/dynamic/rotate | Static and dynamic checkout QR. | |
| Webhooks | GET · POST · PATCH · DELETE | /api/webhooks, /api/webhooks/{id}/* | Its own webhook subscriptions. |
| Open Connect | GET | /api/openconnect/ocplatform/me | The Sub-Platform and its payments module. |
| POST | /api/openconnect/ocplatform/api-keys/rotate | Rotate its key. |
curl -s https://api.goldrail.xyz/api/connect/treasury/payment-requests/core \
-H "X-API-Key: oc_live_SUB_PLATFORM_KEY" \
-H "Content-Type: application/json" \
-d '{ "amount": 1000, "asset": "XOFC", "platform_b_id": "PLATFORM_B_ID" }'With the SDK, create the client with the Sub-Platform key and call the product namespaces:
import { GoldRailClient } from '@goldrail/sdk';
const sub = new GoldRailClient({ apiKey: process.env.SUB_PLATFORM_KEY! }); // oc_live_…
await sub.connect.treasury.paymentRequests.create({ amount: 1000 /* … */ });
await sub.connect.ramp.core.createLink({ params: { amount: 5000, currency: 'XOF' } });
await sub.connect.ramp.settings.get();
await sub.connect.commerce.paymentMethods.update({ onramp: { wave: true } });
await sub.fintech.webhooks.create({ url: 'https://example.com/hooks', events: [] });
await sub.openconnect.platform.rotateApiKey();Webhooks
A Sub-Platform key manages its own subscriptions on /api/webhooks, with the same handlers as
a fintech. Events of its payments module (payment requests, ramp, checkout) are sent to them.
Before 2026-10-20, a business's webhooks were stored on its parent fintech, so a Sub-Platform could read and change its fintech's subscriptions. That is fixed: each Sub-Platform only sees and changes its own.
Portal: members sign in
Auth: an OC ID session (JWT) of a member of the business, signed in on login.openconnect.cc.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/openconnect/ocplatform/portal/public/platforms | Platforms that offer a business portal. |
| GET | /api/openconnect/ocplatform/portal/session | Sub-Platforms of the signed-in user and portal flags. |
| POST | /api/openconnect/ocplatform/portal/self-activate | Self-serve activation under a platform. |
| POST | /api/openconnect/ocplatform/portal/activate | Activation by the platform (its key) or a member. |
| GET · POST | /api/openconnect/ocplatform/portal/kyb/*, /kyc/* | KYB and KYC status, providers, submit. |
| GET · POST | /api/openconnect/ocplatform/portal/api-keys, /api-keys/reveal, /api-keys/rotate | The Sub-Platform key. Reveal and rotate require an approved KYB. |
| GET · POST | /api/openconnect/ocplatform/portal/pin | Operation PIN. |
Dashboard settings
Connect Business, PayLink Business and Shogun Business use the product settings routes with a
dashboard session: /api/connect/commerce/checkout/protocol/* (checkout settings, promo codes,
QR), /api/connect/treasury/billing/protocol/* (plans, retries) and
/api/connect/treasury/accounts/protocol/accounts.
Old paths
/api/connect/sub-platforms/merchant/* and /api/connect/sub-platforms/ops/* were removed
(404).
Old (/api/connect/sub-platforms/merchant/…) | New |
|---|---|
core/payment-requests | /api/connect/treasury/payment-requests/core |
core/ramp/links, core/ramp/operations, core/ramp/embed-token | /api/connect/ramp/core/links, /operations, /embed-token |
protocol/ramp/settings | /api/connect/ramp/settings |
protocol/portal-payment-methods | /api/connect/commerce/payment-methods |
protocol/webhooks/* | /api/webhooks/* |
protocol/me | /api/openconnect/ocplatform/me |
protocol/api-keys/rotate | /api/openconnect/ocplatform/api-keys/rotate |
portal/* | /api/openconnect/ocplatform/portal/* |
The operator tooling (ops/ramp/platforms/{platformId}/*, ops/business/*) moved to
/api/admin/sub-platforms/ramp/platforms/{platformId}/* and /api/admin/sub-platforms/merchants/*
(Open Connect admin key, not public).
Subsidiaries are Sub-Platforms with relation: subsidiary; the former managed business accounts
and their routes are gone.