Skip to main content
Nuvion’s card payment flow uses a Payment Intent and an Intent Action. Create a Payment Intent to declare the charge, then submit an Intent Action to confirm the payment.

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.
The intent is created with 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 include intent_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 using POST /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 omit auth_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.
Redirect the cardholder to 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&currency=USD

Step 3: Check payment status

Use GET /payment-intents/{id} to check the latest status after redirect or while waiting for a webhook.

Apple Pay

For Apple Pay, set intent_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.