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.
string
required
ISO 4217 currency code. e.g. USD.
number
required
Amount in the smallest currency unit. 5000 = $50.00 USD.
string
required
The ID of the account to credit on successful charge.
string
required
Your unique internal order or transaction reference.
string
A human-readable payment description. Maximum 250 characters.
object
Optional confirmation details. Include this when you want to create the Payment Intent and submit the card payment in the same request.
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.

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 Card data encryption for how to create this value.
string
required
The ID of the Payment Intent to charge against. The intent must still have status: requires_action.
string
required
Always confirm.
string
required
Always collections.
string
required
The payment method. Use card-acq for card payments.
string
required
Base64-encoded RSA-OAEP SHA-256 encrypted card object.
object
required
Cardholder billing address.
string
Card authentication model. 3ds_required.
object
required
Browser data used for 3DS authentication.
object
required
Cardholder identity details.
string
URL to redirect the cardholder to after 3DS completes. Required unless auth_model is 3ds_disabled.

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.
Redirect the cardholder to next_action.url. After authentication, Nuvion redirects the cardholder to return_url. Payment details such as status will be 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=01KVFT796D5M1RQ0S853P4XXXX&status=completed&payment_intent_id=01KVFT2B67R57FWGVDFNZ1XXXX&amount=300&currency=EUR

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. Webhook payloads use Nuvion’s standard webhook envelope:
Return a 2xx response after receiving the webhook. If delivery fails, Nuvion retries with exponential backoff. See Webhooks for delivery and retry details.