POST request with a JSON payload to your registered URL.
Every payload is wrapped in a consistent envelope with an event type, so you can safely handle events from multiple Monirates services (exchange, payment links, wallets, stablecoin wallets, and more) on the same webhook URL.
Setup Overview
All webhook configuration happens in your Monirates dashboard:- Log in at business.monirates.com (or dev.business.monirates.com for sandbox).
- Navigate to Settings.
- Generate your API Key and Secret Key.
- Register your Webhook URL.
Monirates delivers all event types to a single registered webhook URL. Use the
event field on every payload to route and handle each event type in your own system — see Event Types & Sample Payloads below.Step 1: Generate Your API Key
Your API key authorizes requests and enables your webhook to receive events. Include it in your request headers:Step 2: Generate Your Secret Key
The Secret Key is used to verify that incoming webhook events genuinely originate from Monirates. Every webhook delivery includes a signature header:event, data, and timestamp together) — combined with your Secret Key. Signing the full envelope, not just data, ensures the event type itself can’t be altered without invalidating the signature.
Validating the Signature
Always validate the signature before processing any webhook event.Step 3: Register Your Webhook URL
Your webhook endpoint must:- Accept POST requests
- Receive JSON payloads
- Be publicly accessible over HTTPS
Retry Behavior
If Monirates cannot reach your endpoint, deliveries are retried automatically:
Each retry re-signs the payload with a fresh
timestamp — a signature from an earlier attempt is not reused.
Manual Retry via API
You can also view and retry failed webhook events programmatically:Security Requirements
Two headers are used to secure webhook communication:Event Types & Sample Payloads
Every webhook delivery uses the same envelope:Some event types cover multiple states of the same resource (for example, a currency exchange moving from
PENDING to SUCCESSFUL). In those cases the event stays the same across deliveries, and you distinguish the state using the status (or type) field inside data.exchange
Triggered when a currency exchange transaction is initiated or updated. data.status reflects the current state (e.g. PENDING, PROCESSING,SUCCESSFUL, FAILED).
payment_link
Triggered when a payment link transaction is initiated or updated.
Payment link webhooks never include the payer authentication token. If your integration needs that token, retrieve it directly from the create-payment-link API response — it’s issued once, at creation, over an authenticated channel.
wallet.created
Triggered when a new fiat wallet is created for your business.
wallet.virtual_account
Triggered when a virtual bank account is created, funded (paid), or expires. data.status reflects the current state: PENDING, PAID, or EXPIRED.
wallet.transaction
Triggered for any fiat wallet transaction — funding, transfers, payouts, and bank transactions. data.type identifies whether it was a credit or debit; data.status reflects the current state.
Bank transfer example (data.metadata shape)
Bank transfer example (data.metadata shape)
stable_wallet.created
Triggered when a new stablecoin wallet is created for your business.
If
data.parentId is present, this wallet belongs to a sub-account. Sub-accounts don’t have their own webhook URL — this event, and every future event for that sub-account’s wallet, is delivered to your parent business’s registered webhook URL.stable_wallet.transaction
Triggered for stablecoin wallet activity — deposits, and withdrawals as they move through PENDING and CONFIRMED states. data.type identifies the transaction type (DEPOSIT, WITHDRAWAL, REVERSAL); data.status reflects the current state.
For sub-account transactions,
data.userId identifies the sub-account, but the webhook itself is always delivered to the parent business’s webhook URL — sub-accounts don’t have independent webhook configuration. Use data.userId to attribute the transaction to the correct sub-account on your side.Fetching Webhook Logs
Beyond the API, you can also view webhook delivery history directly in the Monirates dashboard — filter by event type,SUCCESSFUL, or FAILED, and track retry attempts for reconciliation.
Need help integrating? Reach out to the Monirates support team from your dashboard.

