Skip to main content
Card webhooks cover status changes, digital wallet provisioning, and 3D Secure authentication challenges issued during card transactions. The following events are available:

card.created

Sent whenever a card is created, whether you issue it through the API or Rain creates it internally. This webhook is informational only and does not require a response.
Payload
The body matches card.updated without statusChangeReason and tokenWallets, plus the optional cardCreationSource. For version history, see the card.created webhook reference.

card.updated

Sent when a card status changes or when a user adds their card to a digital wallet. This webhook is informational only and does not require a response.
Payload
Fields marked with a version are present only when your webhook configuration pins that version or later; see Versioning and the card.updated version history. The statusChangeReason field can take these values:

card.notification

The notification webhook is sent when there are important status updates or decisions regarding card provisioning, particularly related to digital wallet token provisioning. This webhook is informational only and does not require a response.
Limited availability:This webhook is currently triggered when:
  • A card provisioning request is declined or encounters an issue
  • Token wallet provisioning decisions are made
Payload
The reasonCode field takes one of these values: The TOKEN_* lifecycle notifications are sent only for programs with network token reporting enabled; contact Rain to enable them. decisionReason applies to PROVISIONING_DECLINED events. The decisionReason.code field tells you who made the decision and what the cardholder can do about it. Rain may add new codes without a version bump, so treat the field as an open-ended string and handle unrecognized values gracefully. Decisions made by Rain Decisions forwarded from the wallet provider. Apple and Google decline these based on their own risk assessment. Rain cannot override them. Declines surface to the cardholder as a generic “Could Not Add Card” error in the wallet regardless of cause, so match this webhook against support reports to identify the actual reason. See Push Provisioning troubleshooting. For version history, see the card.notification webhook reference.

challenge.requested

This webhook is sent when a 3D Secure challenge is initiated for a card transaction. It carries the challenge timing and the transaction context, so you can put the challenge in front of the cardholder. The same event covers both opt-in 3DS paths, and deliveryMethod tells you which flow a challenge belongs to:
Opt-in capability: By default, Rain handles 3D Secure step-up directly and sends no webhook. You receive challenge.requested only if your program is enabled for 3DS Forwarding or Push Notifications. This is independent of whether your program is Rain-Managed or Partner-Managed. See 3D Secure (3DS) for the full Forwarding and OOB flows.
The diagram below traces a Forwarding challenge, where you deliver a one-time password. For the OOB equivalent, see the Push Notifications (OOB) flow.
Webhook Rain sends youYour handler (ack 2xx)Action / API callMerchant / network
👤Cardholder
🏬Merchant / ACS
🌧️Rain
📱Your app
CardholderCheckout with 3DS-enrolled card
Merchant / ACS3DS authentication request
RainGenerate challenge (OTP, TTL)
Webhookchallenge.requested
HandleDeliver OTP (push / in-app)
CardholderEnter OTP
Merchant / ACSValidate
ResultPass or fail; auth proceeds
This event is synchronous with a 60-second timeout: deliver the one-time password to the cardholder and return a 2xx response within that window. If you do not respond in time, the authentication fails and the transaction can be declined. The expiryTime and timeToLive fields define how long the password itself stays valid (300 seconds in the example), which is separate from this response deadline.
Payload
The envelope version field can be absent for some tenants, so treat it as optional when you parse. For the full schema and version history, see the challenge.requested webhook reference.