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.
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.Webhook Rain sends youYour handler (ack 2xx)Action / API callMerchant / network
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.