Step 1: Create a payment intent
A Payment Intent represents your intent to charge a card. No funds are moved at this stage. See Create a payment intent for the full request and response field reference.status: requires_action. No charge happens until you submit an Intent Action.
Create and confirm in one request
If your server already has the encrypted card payload, you can includeintent_action when creating the Payment Intent. It takes the same shape as the Submit an intent action request below, and goes through the same 3DS rules: if the issuer requires customer interaction, the response still returns status: "processing", the nested intent_action.status: "pending_user_action", and a next_action.url to redirect the cardholder to.
Step 2: Submit an intent action
Submit the card payment usingPOST /intent-actions with payment_type set to card-acq and the encrypted card payload in payment_type_data.data. See Confirm a payment intent for the full request parameter reference, and Card data encryption for how to create the encrypted payload.
3DS authentication
3DS is the default card authentication model. If you omitauth_model, Nuvion treats the payment as 3ds_required, and browser_info becomes required. If the issuer requires customer interaction, the response returns status: pending_user_action, requires_action: true, and a next_action.url to redirect the cardholder to.
payment_type_data.card_brand and card_type are not populated while the action is pending_user_action. They appear once the action reaches completed.next_action.url. After authentication, Nuvion redirects the cardholder to return_url. Payment details such as status are appended as query params to the return URL. Do not treat the redirect as proof of payment; confirm completion from the payment intent status or webhook.
Like so: <return-url>?payment_intent_action_id=01HXYZ5504ABCDEFGHJKMNPQRS&status=completed&payment_intent_id=01HXYZ5501ABCDEFGHJKMNPQRS&amount=1000¤cy=USD
Step 3: Check payment status
UseGET /payment-intents/{id} to check the latest status after redirect or while waiting for a webhook.
Apple Pay
For Apple Pay, setintent_action.payment_type to applepay-acq. Apple Pay does not use payment_type_data.data, full billing address fields, or card encryption in this request. The only required billing field is payment_type_data.billing_address.country.
Payment intent statuses
Intent action statuses
Webhooks
Use Payment Intent webhooks as the final confirmation that a card payment succeeded, failed, or was cancelled. This is especially important after a 3DS redirect, because the redirect only tells you the customer returned to your site.
See Event types for the full payload schema, including the nested
intent_action.
Return a 2xx response after receiving the webhook. If delivery fails, Nuvion retries with exponential backoff. See Webhooks for delivery and retry details.
What’s next
Payment Refunds API reference
Refund all or part of a completed card or Apple Pay payment.
Payment Intents API reference
Full endpoint documentation for payment intents and intent actions.
Event types
Full payload schema for
payment_intent.* and every other webhook event.