Skip to content

Rate Quotes & Spread

All deposit and withdrawal quotes include a spread applied on top of the live market FX rate. The total spread is the sum of Regini's base margin and any additional margin you have configured on your program.

The spread is always applied against the user:

Deposits (KES to USDC): the effective rate is marked up, so the user receives fewer USDC per KES paid.

effective_rate = market_rate × (1 + spread_bps / 10000)
usdc_received  = kes_amount / effective_rate

Withdrawals (USDC to KES): the effective rate is marked down, so the user receives fewer KES per USDC sold.

effective_rate = market_rate × (1 - spread_bps / 10000)
kes_received   = usdc_amount × effective_rate

The exchange_rate in every quote response is the effective KES/USDC rate with the full spread already applied, this is the rate to show the user.


Quote lifecycle

Property Value
Validity 10 minutes from issue
Reuse Single-use; consumed on a successful deposit or withdrawal
Expiry RATE_EXPIRED error if used after 10 minutes or after first use

Configuring your partner spread

You can add your own FX margin on top of Regini's base spread at the program level. This is optional, if you do not configure one, the Regini base spread is the only margin applied.

PATCH /programs/{program_id}/spread

Requires scope: accounts:create

{
  "partner_spread_bps": 25
}
Field Type Constraints
partner_spread_bps integer 0 – 500 (0 removes the partner spread)

Revenue from your additional spread is credited to your FX spread ledger account and visible in your Ledger view.

Response:

{
  "program_id": "uuid",
  "partner_spread_bps": 25
}

The change takes effect on the next quote issued. Existing locked quotes (rate_ids already issued) continue to use the spread at the time they were created.