Skip to main content

Event types

Delivery headers: X-RAAS-Event, X-RAAS-Timestamp, and X-RAAS-Signature. See Webhook security.
New event types may appear. Always acknowledge with HTTP 2xx and ignore unknowns safely. For operation status meanings, see Operation lifecycle.

Use this to persist the link and deliver url to your user asynchronously.

Emitted when the end user cancels the widget before creating an operation (for example the Lola summary Cancel). The link is not revoked: the same URL remains claimable until TTL. Distinct from operation.cancelled (Reg E, after create) and from partner POST /partner/links/:id/revoke.
A second cancel re-emits the same event. Dedupe by linkId (and a short window) if you prompt the user. Do not treat the link as dead.
Emitted when a single-use magic link (today: Lola) already created an operation and the widget attempts POST /widget/links/:linkId/operations again. The HTTP response is 409 LINK_ALREADY_USED. Distinct from link.cancelled (cancel before create) and from operation.cancelled. The consumed link stays claimable (HTTP 200) so the customer can see the payment reference and return to chat. Do not treat this as a dead link. Offer a new Lola link if they need to send again.
Other flows do not emit this event: their magic links stay unlimited.

user.created

Fired the first time RaaS Widgets creates a User for your referenceId (typically on magic-link claim). source is one of claim, request_money, deferred_payout_bind, terms_accept, debug, or system. Correlate later events with userId / referenceId. Money movement still uses operation.*.

user.role_added

Emitted once per role the first time the user participates as sender (funded / created an operation or deferred origination), receiver (minted a money request), or claimer (completed a payout-claim bind). Optional correlation fields: operationId, requestId, originationId, linkId. Roles are additive history, not entitlements — they do not skip CIP.

user.campaign_attributed

Fired the first time a campaign slug is stamped on a user (typically on magic-link claim). Later links with other slugs only append to campaignsParticipated and do not re-emit this event. The first-touch campaign is immutable.
campaign is an opaque slug. Sponsor, dates, and revenue terms live in your campaign system — join on this key.

user.data_request

Fulfill with:
Details: Data requests.

user.cip_verified

CIP approved. No document or biometric PII is included — use GET /partner/users/:userId if you need CIP outcome detail. Also emitted: user.cip_failed (cipStatus: "failed") and user.cip_manual_review (cipStatus: "manual_review") with the same shape.

operation.created

requestId is included only when the operation fulfills a money request (fund-request / Request API). Direct send operations omit it. Deferred payout claims include originationId instead. When the receiving party is a known User (request fulfillment or payout-claim), recipientReferenceId is that party’s partner User.referenceId (for Request API: requestData.userReferenceId). referenceId remains the funding party. recipientUserId is not sent to partners.
After create, the operation moves through created → processing → a terminal status. See Operation lifecycle.

operation.completed

Treat this as final success for fulfillment and reconciliation. referenceId is the partner identity of userId (same value as operation.created and GET /partner/operations/:id). Do not assume this payload already contains the pickup PIN. The PIN is a separate payout code delivery (operation.references_available and/or GET /partner/operations/:id).

operation.references_available

Fired when the corridor has issued canonical references for an in-flight or recently settled operation (pickup PIN, tracking ref). Does not change status.
The PIN is references where type === "PAYOUT_CODE". Integration guide: Payout code (PIN).
Document descriptors may appear on this event. PDF bytes are never attached — download via GET /partner/operations/:id/documents/PAYOUT_RECEIPT.

operation.failed

If you held balances or locks on operation.created, reverse them when you receive operation.failed.

operation.cancelled

Terminal operation.* events include referenceId of the operation’s user (same value as operation.created). Widget-initiated cancels also include cancellationReason. Corridor-driven cancels include funding/payout/amount and may include requestId when the op fulfilled a money request. There is no separate operation.expired event — funding expiry maps to cancelled.
If you held balances or locks on operation.created, reverse them when you receive operation.cancelled.

request_money.created

Emitted after a successful legacy POST /v1/request-money. The platform creates a money request and a fund-request link for the sender.
Persist requestId and deliver fundRequestLink to the sender. Later operation.* events for the same ask include the same requestId. Full journey: Request money lifecycle.

request_money.cancelled

Emitted once per pending request when the requester is blocked. The request is cancelled and its shareable fund-request link is revoked. Requests with an operation already created are left unchanged.

request_money.failed

Emitted when a legacy Request API POST or GET under /v1/request-money fails (for example identity / watchlist rejection at create).
request_money.updated is deprecated and not emitted. For payer fulfillment and settlement, use operation.created, operation.completed, operation.failed, and operation.cancelled.

deferred_payout.created

Emitted when a deferred payout origination is created (legacy deferred-payout API or first persistence in an awaiting-claim / payment-bound state).
See Deferred payout.

deferred_payout.updated

Same payload shape as deferred_payout.created. Fired when binding state or operationId changes (claim, cancel, expire, or operation sync) after the initial create notification.

deferred_payout.failed

Structured error payload when a deferred payout API call fails (path, method, error code, HTTP status, message) — same pattern as request_money.failed.

Handler sketch

Next steps

Security

Verify HMAC signatures.

Operation lifecycle

Statuses and which webhooks fire.

Payout code (PIN)

Pickup PIN via GET or webhook.

Request money lifecycle

Request → fund-request → operation.

Data requests

Fulfill user.data_request.