/api/v1/merchant/ramp
Auth matches Merchant API v1: signed API key requests, or portal JWT with X-Business-Id.
This is separate from
POST /api/v1/merchant/quotes/ramp (crypto swap-style quotes). Use merchant ramp for fiat ↔ crypto corridors supported on your account.Flow
POST /ramp/quote— amounts and fees (customerAmount, optionalmerchantFee).POST /ramp/onramporPOST /ramp/offramp— sameamountas the quote.GET /ramp/transactions/:reference— status and payment or deposit instructions.- Webhooks —
ramp.createdandramp.status_updated(Webhooks).
Endpoints
Rules
- Initiate and OTP are LIVE-only (
400,RAMP_LIVE_ONLYin TEST). - Transactions are scoped to your business; unknown references return 404.
- Offramp requires completed owner KYC (same as withdrawals).
Markup
- Markup is set in the merchant portal (owner), not in the API.
customerAmount— customer pays (onramp) or receives in fiat (offramp) after markup.merchantFee—{ percent, amountUsd, amountFiat }when markup applies; otherwisenull.
Quote
POST /api/v1/merchant/ramp/quote
Onramp
POST /api/v1/merchant/ramp/onramp
Use the same amount as the quote.
reference, payment instructions, and requiresOtp when the OTP endpoint is required.
Offramp
POST /api/v1/merchant/ramp/offramp
deposit (crypto to send) and payout (fiat destination summary).
OTP
POST /api/v1/merchant/ramp/transactions/:reference/otp
requiresOtp is true.
Status and list
GET /api/v1/merchant/ramp/transactions/:reference — amounts, customerAmount, merchantFee, instructions.
GET /api/v1/merchant/ramp/transactions — page, limit.
Statuses: INITIATED → PENDING → PROCESSING → COMPLETED | FAILED.
Webhooks
Payload
data: object: "ramp_transaction", reference, direction, status, amounts, merchantFee when applicable. Verify Morapay-Signature per Webhooks.

