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

ProductMethodPathPurpose
Connect TreasuryPOST/api/connect/treasury/payment-requests/coreCreate a payment request.
GET/api/connect/treasury/payment-requests/core/{id}Read a payment request.
POST/api/connect/treasury/payment-requests/core/{id}/cancelCancel it (204).
GET/api/connect/treasury/accounts/core/accountsAccounts and balances of the Sub-Platform.
GET/api/connect/treasury/accounts/core/accounts/{label_key}, /funding, /transactionsOne account, its funding instructions, its transactions.
GET · POST/api/connect/treasury/accounts/core/transactions, /transactions/{id}Account transactions.
POST/api/connect/treasury/accounts/core/transfersTransfer from one of its accounts (sender.account).
POST/api/connect/treasury/accounts/core/onramp/fiat, /offramp/fiatFiat in / out of its accounts.
GET/api/connect/treasury/accounts/protocol/accounts, /accounts/{label_key}/fundingDashboard view of its accounts.
Connect RampPOST · GET/api/connect/ramp/core/linksCreate and list ramp links.
GET · PATCH · DELETE/api/connect/ramp/core/links/{id}Read, update, delete a ramp link.
GET/api/connect/ramp/core/operationsRamp operations of the Sub-Platform.
POST/api/connect/ramp/core/embed-tokenToken for the embedded ramp.
GET · PUT/api/connect/ramp/settingsRamp settings: what it inherits, its overrides, the effective result.
Connect CommerceGET · PATCH/api/connect/commerce/payment-methodsPayment methods offered on its portal.
GET · PATCH/api/connect/commerce/checkout/protocol/checkout-settings, /order-prep-settingsCheckout page and order preparation settings.
GET · POST · PATCH · DELETE/api/connect/commerce/checkout/protocol/promo-codes, /promo-codes/{id}, /validate, /consumePromo codes.
GET · POST/api/connect/commerce/checkout/protocol/qr/static, /qr/dynamic, /qr/dynamic/rotateStatic and dynamic checkout QR.
WebhooksGET · POST · PATCH · DELETE/api/webhooks, /api/webhooks/{id}/*Its own webhook subscriptions.
Open ConnectGET/api/openconnect/ocplatform/meThe Sub-Platform and its payments module.
POST/api/openconnect/ocplatform/api-keys/rotateRotate 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.

MethodPathPurpose
GET/api/openconnect/ocplatform/portal/public/platformsPlatforms that offer a business portal.
GET/api/openconnect/ocplatform/portal/sessionSub-Platforms of the signed-in user and portal flags.
POST/api/openconnect/ocplatform/portal/self-activateSelf-serve activation under a platform.
POST/api/openconnect/ocplatform/portal/activateActivation 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/rotateThe Sub-Platform key. Reveal and rotate require an approved KYB.
GET · POST/api/openconnect/ocplatform/portal/pinOperation 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.

On this page