GH GambleHub

Submerches and cascades

1) Conceptual base

A sub-merchant is a legal entity that accepts payments through the main merchant/provider (PayFac/platform/operator). Cash flows go to the master MID/platform account, then the platform pays the sub-merchant (split/sweep).

Cascading is a strategy of sequential or parallel transaction routing through several PSP/acquirers/MID according to the rules (GEO, BIN, tariff, risk, load) to increase authorization and reduce cost.

PayFac-model - platform as a "mini-acquirer": onboarding of a sub-merchant (KYB/PCI), assignment of sub-MID, uniform rules of KYC/AML and disputes, centralized settlement and payments.

2) Where and when you need it in iGaming

Multi-brand/white-label: one operator, dozens of sub-brands/studios → easier to maintain MIDs/descriptors and reporting.
Content marketplace: platform - MoR/PayFac, studios - submersibles (revshare, splits).
High risk/geo-mix: PSP cascades reduce failures, incident shocks and payment costs.
Local methods/payment corridors: you need to choose a provider on the fly and fallback.

3) Responsibilities and roles

AreaPlatform (Master)Submerchant
KYB/KYC/AMLOnboarding, limits, monitoringData Delivery, Compliance
PCI/card dataUsually on the platform/its PSPOut-of-scope for tokenization
Refund/ChargebackCase administration, timing, evidenceCase Materials, Returns Policy
Fraud/3DSRules, models, ab testsTriggers and limits on your traffic
Settlement/ReservesEncasement, accounting reserve/fees/splitReceiving payments, agreeing to deductions
Taxes (VAT/GST/GGR/WHT)By MoR Model/ContractBy Jurisdiction/Contract (Royalty/Rebar)
💡 Important: if the platform is MoR/PayFac, it bears consumer responsibility and the risks of schemes/acquirer. If the sub-merchant is Direct Merchant, the liability is split between contracts and MIDs.

4) Hierarchy of MIDs and descriptors

Master MID (platform)

Sub-MID (s) └─ by Brand/Geo/Method

└─ Routing Profiles (PSP1→PSP2… cascade)

Recommendations:
  • Separate descriptors on sub-MID: fewer disputes.
  • Separate cards/A2A/local methods by sub-MID for pure analytics and reserve control.
  • Version routing profiles (v1/v2) for A/B.

5) Cascades: How to build

5. 1. On-the-fly solution

When authorizing: select a route according to the rules (GEO, BIN/IIN, brand, debit/credit card, risk class, PSP limit, current AR/DR, tariff/FX, SLA incidents).

5. 2. Types of cascades

Consecutive: PSP_A → (soft decline) → PSP_B → PSP_C.
Split-traffic:% of traffic to different PSPs for benchmarking and decorrelation.
Sticky BIN: securing a successful BIN pool for the best PSP.

5. 3. Restrictions

Read idempotency (so as not to double capture).
Agree with PSP on repeated attempts (retry window, soft codes).
Consider 3DS policy and liability shift on each route.

6) Settlement, T + N, reserves and splits

Each PSP/acquirer has its own cut-off/T + N and its own rolling reserve.
The platform aggregates receipts at the sub-MID level and maintains a reserve-ledger with a release calendar.
Payments to sub-merchants: net of fees & reserve + their share (revshare/CPA) for the reporting period.
Support splits by transaction (platform/studio/affiliate/tax) or by article by period.

7) Antifraud, 3DS and limits at the sub-merchant level

Different scoring thresholds for A/B/C classes of markets.
3DS rules for BIN/geo/check (mandatory/soft/step-up).
Velocity-limits (input/output, card attempts) and caps by submerchant.
"Gray" substandards: stricter limits, only white methods and deferred payments.

8) Tariffs and take-rate

Consider effective take-rate by submerchant: PSP fees (interchange/scheme/markup/fixed) + FX slippage + platform share + reserve-effect.
Use IC++ and BIN-routing to reduce blended cost in a cascade.

9) Data and minimum model

sql
-- Directories
CREATE TABLE ref. submerchants (
sub_id    BIGSERIAL PRIMARY KEY,
legal_name  TEXT, brand TEXT, country TEXT, risk_class TEXT, status TEXT,
created_at TIMESTAMP, meta JSONB
);

CREATE TABLE ref. routing_profiles (
profile_id BIGSERIAL PRIMARY KEY,
name TEXT, version TEXT, enabled BOOLEAN, meta JSONB
);

CREATE TABLE ref. routing_rules (
rule_id BIGSERIAL PRIMARY KEY,
profile_id BIGINT REFERENCES ref. routing_profiles,
method TEXT, geo TEXT, bin_from TEXT, bin_to TEXT,
psp TEXT, mid TEXT, require_3ds BOOLEAN,
priority INT, soft_codes JSONB, enabled BOOLEAN, meta JSONB
);

-- Transactions linked to a sub-merchant and a route
CREATE TABLE payments. transactions (
id BIGSERIAL PRIMARY KEY,
sub_id BIGINT REFERENCES ref. submerchants,
profile_id BIGINT, rule_id BIGINT,
provider TEXT, mid TEXT, method TEXT, brand TEXT,
status TEXT, decline_code TEXT,
amount_original NUMERIC(18,6), currency_original TEXT,
amount_reporting NUMERIC(18,6), reporting_currency TEXT,
fx_reference_rate NUMERIC(18,10), fx_effective_rate NUMERIC(18,10),
authorized_at TIMESTAMP, captured_at TIMESTAMP, settled_at TIMESTAMP, funded_at TIMESTAMP,
user_id BIGINT, country_player TEXT, bin TEXT, three_ds_used BOOLEAN,
idempotency_key TEXT UNIQUE, meta JSONB
);

-- Phi and reserves for sub-merchant/provider/period
CREATE TABLE finance. settlement_fees (
sub_id BIGINT, provider TEXT, mid TEXT,
period_start TIMESTAMP, period_end TIMESTAMP,
interchange_amt NUMERIC, scheme_amt NUMERIC, markup_amt NUMERIC,
auth_amt NUMERIC, refund_amt NUMERIC, cb_amt NUMERIC, gateway_amt NUMERIC,
fx_spread_amt NUMERIC, reserve_delta NUMERIC, total_fees NUMERIC, currency TEXT
);

CREATE TABLE finance. reserve_ledger (
id BIGSERIAL PRIMARY KEY,
sub_id BIGINT, provider TEXT, mid TEXT,
hold_date DATE, release_due_date DATE,
hold_amount NUMERIC, released_amount NUMERIC,
cb_consumed NUMERIC, fines_consumed NUMERIC,
status TEXT, meta JSONB
);

-- Submerchant payments
CREATE TABLE payouts. submerchant_settlements (
sub_id BIGINT, period_start TIMESTAMP, period_end TIMESTAMP,
gross_sales NUMERIC, refunds NUMERIC, chargebacks NUMERIC,
fees_total NUMERIC, reserve_delta NUMERIC, revshare NUMERIC,
net_payable NUMERIC, currency TEXT, paid_at TIMESTAMP, statement_ref TEXT
);

10) SQL templates

10. 1. Effective cost per submerchant

sql
SELECT t. sub_id,
SUM(t. amount_reporting) AS volume_rep,
SUM(f. total_fees)    AS fees_rep,
100. 0 SUM(f. total_fees) / NULLIF(SUM(t. amount_reporting),0) AS take_rate_pct
FROM payments. transactions t
JOIN finance. settlement_fees f
ON f. sub_id=t. sub_id
AND t. settled_at BETWEEN f. period_start AND f. period_end
WHERE t. settled_at BETWEEN:from AND:to
GROUP BY 1
ORDER BY take_rate_pct DESC;

10. 2. Cascade efficiency (AR/DR) by rule

sql
SELECT r. profile_id, r. psp, r. mid,
COUNT() FILTER (WHERE t. status='APPROVED') AS approvals,
COUNT() FILTER (WHERE t. status='DECLINED') AS declines,
ROUND(100. 0 COUNT() FILTER (WHERE t. status='APPROVED') / NULLIF(COUNT(),0), 2) AS ar_pct
FROM payments. transactions t
JOIN ref. routing_rules r ON r. rule_id=t. rule_id
WHERE t. authorized_at BETWEEN:from AND:to
GROUP BY 1,2,3
ORDER BY ar_pct DESC;

10. 3. Reserve-balance by submerchant

sql
SELECT sub_id,
SUM(hold_amount - released_amount - cb_consumed - fines_consumed) AS reserve_balance
FROM finance. reserve_ledger
WHERE hold_date <=:as_of
GROUP BY 1;

10. 4. Net payable settlement

sql
SELECT s. sub_id,
SUM(s. gross_sales - s. refunds - s. chargebacks
- s. fees_total + s. reserve_delta - s. revshare) AS net_payable
FROM payouts. submerchant_settlements s
WHERE s. period_start >=:from AND s. period_end <:to
GROUP BY 1;

11) Dashboards and KPIs

AR/DR by cascade: by GEO/BIN/method/PSP, share of 3DS, soft-decline share.
Take-Rate% and component stack fees by submerchant.
CB Ratio/Refund Rate on sub-MID.
Reserve Balance & Release ETA by Submerchant/PSP.
Settlement SLA: T+N hit-rate, funding delays.
Payout Health: frequency and amounts of payments to submerchants, delays.
FX Slippage in cascades (effective vs reference).

12) Alerts and thresholds

Routing Degradation: Fall AR> Y bps hour-to-hour on rule.
CB Spike: Sub-merchant's chargeback growth> X bps w/w.
Reserve Imbalance: Reserve Ledger Fails - P1.
Settlement Delay: PSP T + N violation → auto-switch in cascade.
Take-Rate Spike: cost growth> threshold (fees or FX).
Policy Drift: transactions without binding to profile/rule/idempotency - P1.
Payout Delay: late payment to the sub-merchant> SLA.

13) Onboarding and sub-merchant compliance

ESC/sanctions/REP: packages of documents, beneficiaries, sources of funds.
PCI/security: tokenization, ban PAN storage at the sub-merchant.
Returns/bonus policies: uniform standards, SLA tickets.
Aggregated reporting: separately by brand, geo, methods.
Limits/caps: daily/weekly turnovers, payout-caps, deferred repayments for high-risk.

14) Best practices (short)

1. Version routing profiles and store explain decision logs.
2. Keep sticky BIN and A/B PSP tests for AR stability and price.
3. Mappite fees/FX/reserve to the level of the sub-merchant; pay net-of-fees on SLA.
4. Idempotency + retry-policy only by soft-decline; comply with PSP limits.
5. Descriptors and sub-MIDs are unique to the brand/geo: fewer disputes.
6. Reserve ledger with release calendar and missed-release alerts.
7. Transparent reports to the sub-merchant: decoding fees, reserve, FX, disputes.
8. Failover playbooks: PSP/corridor drop - instant reroute.

15) Implementation checklist

  • Directories' submerchants', 'routing _ profiles', 'routing _ rules'.
  • KYB/KYC/AML protocols and status storage.
  • Router with idempotency and soft-decline logic.
  • Import PSP settlement files → 'settlement _ fees' + reserve-ledger.
  • Payouts mechanism to sub-merchants + acts/statutes.
  • Dashboards AR/DR/CB/fees/reserve + alerts.
  • Documents: Dispute Policy, 3DS Rules, Limits, and SLAs.

Summary

Submerchants provide scale and flexibility, and cascades provide stability, conversion, and manageable cost. The architecture from the hierarchy of MIDs, versioned routing profiles, transparent fees/reserves accounting and strict compliance turns a complex multi-GEO payment loop into a predictable system: high authorization, low take-rate, quick payments and a minimum of surprises on risks.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Telegram
@Gamble_GC
Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.