store: true on the first (customer-present) transaction. The system stores the Plaid access token and returns a payment_method.id. Use that ID for subsequent merchant-initiated charges without collecting a new Plaid Link token.
Identity and Identity Match checks are performed only on the initial transaction. Balance and Signal checks are performed on both the initial transaction and all subsequent recurring payments, as these checks evaluate transaction-specific risk factors that may change with each payment.
Step 1: First payment
Setstore: true, mark it as payment_source: "recurring", and leave merchant_initiated / is_subsequent_payment false.
Step 2: Subsequent charge
Use the savedpayment_method_id, set payment_source: "recurring", and mark it as merchant-initiated and subsequent.
Re-authenticating stored payment methods
Stored Plaid payment methods occasionally require re-authentication. This is typically needed when bank credentials expire, the bank requires new MFA, consent is nearing expiry, or the connection is in an error state. The main signal is a failed transaction on that stored method witherror_code: payment_method_requires_action.
You can also detect upcoming or expired mandates via webhooks. The system emits payment-method.authorization-expiring (token close to expiring) and payment-method.authorization-update-required (token expired) events when receiving updates from Plaid.
When you see this error, create a new Link token for the stored payment method using the Sessions API. Include the stored payment method ID in the x-gr4vy-payment-method header and use this payload structure, where access_token is replaced by the system with the vaulted access token:
If the reauthorization happens outside of Plaid’s Update Mode, the system sends a
payment-method.authorization-updated webhook. When using Update Mode, only your frontend receives confirmation; no webhook is emitted. See Plaid’s Update Mode documentation for details.