Skip to main content
EasyOnRamp delivers events to HTTPS endpoints you configure. Each delivery is signed with HMAC-SHA256 so you can verify authenticity. Subscribe to specific events or use wildcards. Omit events (or pass ["*"]) to receive every event type.

Subscribe

Or narrow the subscription:
Response includes id and secret. Store the secret immediately; it is only shown on create and rotate.

Delivery envelope

Every POST to your endpoint uses this shape. Use id for idempotent processing.
Headers: All monetary amounts in data are integer cents unless noted.

Verify signatures (TypeScript)

Compare signatures with a constant-time function. Use the raw request body bytes exactly as received (do not re-serialize parsed JSON).

Webhook delivery logs

Inspect outbound delivery attempts (pending, delivered, or failed) for your business.
Response item
Use delivery id to correlate with the id sent in the webhook body. Fix your endpoint, then rely on automatic retries for in-flight deliveries or investigate failed rows after the final attempt.

Retries

Failed deliveries (non-2xx or network error) retry with exponential backoff up to ten attempts. Design your handler to be idempotent using the delivery id in the payload.

Events

Subscribe using exact event names or wildcards (see Wildcards). Each delivery sets type to the event name and data to the payload below. Amounts are integer cents unless noted. Across user-scoped events, userId is the same Mongo ObjectId returned by POST /users and GET /users/{userId}. Card events include user: { id, name } instead of top-level userId / userCode.

Deposits

deposit.created

Treasury deposit created.

deposit.proof_submitted

Proof of payment uploaded.

deposit.approved

Deposit approved and treasury credited.

deposit.declined

Deposit rejected by ops.

deposit.expired

Deposit expired without matching transfer.

Trading

payAmount, receiveAmount, and convertedAmount are integer cents. pay is the asset you pay; receive / convertedCurrency is the asset you receive.

trade.approved

Trade completed and treasury balances were updated. Same shape as the buy/sell API response (no status field).

Card transactions

amount is integer cents. transactionDateAt is the ISO-8601 time for this event. Lifecycle: the first event is usually card.transaction.pending (authorization held). Later you may receive completed, declined, or reversed.

card.transaction.pending

Authorization or hold recorded. Usual first event for a new spend.

card.transaction.completed

Transaction settled.

card.transaction.declined

Authorization declined.

card.transaction.reversed

Reversal or refund.

Card disputes

card.dispute.created fires when a dispute is filed. card.dispute.updated fires when the status or textEvidence changes. data.id is the dispute id. data.transactionId is the same id used on card transaction events. See Transaction disputes. Status values: pending, inReview, accepted, rejected, canceled, resolvedByMerchant. When the card network accepts a dispute, the credit arrives separately as card.transaction.completed with a negative amount.

card.dispute.created

card.dispute.updated

EasyCard application

business.application.pending

Company application submitted (POST /business/application).

business.application.needs_verification

Additional issuer verification required for the company application.

business.application.approved

Company application approved - you may enroll end users.

business.application.rejected

Company application declined.

Card enrollment

card.enrollment.pending

End user enrolled on the EasyCard application; compliance in progress.

card.enrollment.needs_verification

Issuer requires additional verification before enrollment can be approved.

card.enrollment.approved

User compliance approved - you may issue cards.

card.enrollment.rejected

User enrollment declined.

Card status

card.status.changed

Card frozen, unfrozen, or terminated.
Status is one of active, frozen, or terminated.

Card programme movements

card.fund.completed

Corporate EasyCard programme funding completed. spendingPower is the updated company programme balance.
card / user may be omitted for programme-level funds.

card.withdraw.completed

Corporate EasyCard programme withdrawal completed. spendingPower is the updated company programme balance.
card / user may be omitted for programme-level withdrawals.

Users

user.created

End user provisioned.

user.deleted

End user removed.

user.updated

End user profile updated via PATCH /users/{userId} or retail/ops changes. Includes only fields that changed (name, firstName, lastName, email, phone, subAccount, twoFactorEnabled, emailVerified, and/or phoneVerified).

User KYC

user.kyc.pending

KYC started. Emitted with user.created when a Persona inquiry is created.

user.kyc.approved

KYC approved.

user.kyc.declined

KYC declined.

Business KYB

business.kyb.pending

Business KYB started.

business.kyb.approved

Business KYB approved.

business.kyb.declined

Business KYB declined.

Wildcards

Use these patterns in the events array when creating or updating a subscription.