Event types
Delivery headers:
X-RAAS-Event, X-RAAS-Timestamp, and X-RAAS-Signature. See Webhook security.link.created
url to your user asynchronously.
link.opened
link.cancelled
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 fromoperation.cancelled (Reg E, after create) and from partner POST /partner/links/:id/revoke.
linkId (and a short window) if you prompt the user. Do not treat the link as dead.
link.reuse_blocked
Emitted when a single-use magic link (today: Lola) already created an operation and the widget attemptsPOST /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.
user.created
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
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 tocampaignsParticipated 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
user.cip_verified
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.created → processing → a terminal status. See Operation lifecycle.
operation.completed
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 changestatus.
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
operation.cancelled
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.
request_money.created
Emitted after a successful legacyPOST /v1/request-money. The platform creates a money request and a fund-request link for the sender.
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 APIPOST 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).deferred_payout.updated
Same payload shape asdeferred_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 asrequest_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.