Non-3DS Card Payments#
Process card payments without 3D Secure authentication for immediate results.Overview#
Non-3DS payments provide an immediate response (success or failure) without requiring customer authentication. This is ideal for:Recurring payments (with saved cards)
Merchants with low fraud rates
Faster checkout experience
Trade-off: Higher risk, less liability protection compared to 3DS payments.Authentication#
All requests must include your Client ID in the Authorization header.
See Authentication Guide for details.Encryption#
Card data must be encrypted before sending.
See Encryption Guide for implementation details.Endpoint#
Sandbox: https://sandbox-acquiring.globalremitfs.com
Production: https://acquiring.globalremitfs.com
Request Parameters#
| Field | Type | Required | Description |
|---|
merchant_reference | string | Yes | Your unique order/transaction reference (must be unique) |
merchant_meta | object | No | Custom metadata (max 10 key-value pairs) |
amount | integer | Yes | Amount in smallest currency unit (cents for USD, pence for GBP) |
currency | string | Yes | ISO 4217 currency code (USD, GBP, EUR, etc.) |
description | string | No | Payment description (shown to customer) |
payment_method | object | Yes | Payment method details |
payment_method.type | string | Yes | Must be "card" |
payment_method.data | string | Yes | RSA-encrypted card data (see encryption guide) |
billing_address | object | Yes | Customer billing address |
billing_address.first_name | string | Yes | Customer first name |
billing_address.last_name | string | Yes | Customer last name |
billing_address.email | string | Yes | Customer email (must be valid format) |
billing_address.address_line_one | string | Yes | The first line of the billing address |
billing_address.address_line_one | string | No | The second line of the billing address |
billing_address.country | string | Yes | ISO 3166-1 alpha-2 country code (US, GB, etc.) |
billing_address.city | string | Yes | City name |
billing_address.state | string | Yes | State name |
billing_address.zip | string | No | Postal/ZIP code |
ip_address | string | Yes | Customer IP address (for fraud detection) |
redirect_url | string | No | URL to redirect customer after payment (used for webhooks) |
webhook_url | string | No | URL for payment status webhooks |
enable_3ds | boolean | No | Must be false or omitted for non-3DS. Default: auto-detect |
Response Fields#
Success Response (HTTP 200)#
| Field | Type | Description |
|---|
status | string | Always "successful" |
message | string | Success message |
data | object | Payment response data |
data.payment_id | string | Unique payment identifier (ULID format) |
data.merchant_reference | string | Your original transaction reference |
data.merchant_meta | object | Your custom metadata (as provided in request) |
data.amount | integer | Payment amount |
data.currency | string | Payment currency |
data.status | string | Payment status: "completed" or "failed" |
data.authorization_code | string | Bank authorization code (if successful) |
data.failure_reason | string | Failure reason (if failed) |
data.redirect_url | string | URL with payment result params |
data.created_at | number | Payment creation timestamp (Unix ms) |
data.completed_at | number | Payment completion timestamp (Unix ms) |
Error Response (HTTP 4xx/5xx)#
| Field | Type | Description |
|---|
status | string | Always "error" |
message | string | Error description |
code | string | Error code (AUTHERR, INVLDDATA, DUPLRCRD, etc.) |
Example Request#
Full JSON#
{
"merchant_reference": "order_12345",
"merchant_meta": {
"customer_id": "cust_789",
"order_type": "retail"
},
"amount": 5000,
"currency": "USD",
"description": "Premium Subscription - Annual",
"payment_method": {
"type": "card",
"data": "tbjH0nx6WaEkzHOjgw2crsusmVBuL8s+PxWFqYb5cWZ3k1..."
},
"billing_address": {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"country": "US",
"city": "New York",
"zip": "10001"
},
"ip_address": "203.0.113.42",
"redirect_url": "https://yoursite.com/payment/callback",
"webhook_url": "https://yoursite.com/webhooks/payment",
"enable_3ds": false
}
cURL#
Node.js#
Example Responses#
Successful Payment#
{
"status": "successful",
"message": "Payment processed successfully",
"data": {
"payment_id": "01HXYZ123ABC456DEF789GHI",
"merchant_reference": "order_12345",
"merchant_meta": {
"customer_id": "cust_789",
"order_type": "retail"
},
"amount": 5000,
"currency": "USD",
"status": "completed",
"authorization_code": "AUTH123456",
"redirect_url": "https://yoursite.com/payment/callback?payment_id=01HXYZ123ABC456DEF789GHI&merchant_reference=order_12345&status=success",
"created_at": 1699564800000,
"completed_at": 1699564802000
}
}
Failed Payment#
{
"status": "successful",
"message": "Payment processed",
"data": {
"payment_id": "01HXYZ123ABC456DEF789GHI",
"merchant_reference": "order_12345",
"merchant_meta": {
"customer_id": "cust_789",
"order_type": "retail"
},
"amount": 5000,
"currency": "USD",
"status": "failed",
"authorization_code": null,
"failure_reason": "Insufficient funds",
"redirect_url": "https://yoursite.com/payment/callback?payment_id=01HXYZ123ABC456DEF789GHI&merchant_reference=order_12345&status=failed",
"created_at": 1699564800000,
"completed_at": 1699564801000
}
}
Note: Even failed payments return HTTP 200. Check data.status field.Duplicate Merchant Reference#
{
"status": "error",
"message": "A payment with this merchant reference already exists",
"code": "DUPLRCRD"
}
HTTP Status: 409 ConflictInvalid Card Data#
{
"status": "error",
"message": "Invalid card number",
"code": "VALIDATIONERR"
}
HTTP Status: 400 Bad RequestAuthentication Error#
{
"status": "error",
"message": "Client ID not found",
"code": "AUTHERR"
}
HTTP Status: 401 UnauthorizedRedirect URL Parameters#
After payment completion, the customer can be redirected to your redirect_url with these query parameters:| Parameter | Description |
|---|
payment_id | Nuvion payment ID |
merchant_reference | Your original transaction reference |
status | Either "success" or "failed" |
https://yoursite.com/payment/callback?payment_id=01HXYZ123ABC456DEF789GHI&merchant_reference=order_12345&status=success
Your redirect URL may already have query parameters. Nuvion's parameters are appended safely:https://yoursite.com/callback?session=abc123&payment_id=01HXYZ...&merchant_reference=order_12345&status=success
Webhooks#
If you provide a webhook_url, Nuvion will send a POST request with the payment result:{
"event": "payment.completed",
"payment_id": "01HXYZ123ABC456DEF789GHI",
"merchant_reference": "order_12345",
"merchant_meta": {
"customer_id": "cust_789",
"order_type": "retail"
},
"status": "completed",
"amount": 5000,
"currency": "USD",
"authorization_code": "AUTH123456",
"created_at": 1699564800000,
"completed_at": 1699564802000
}
Always verify webhook signatures (documentation coming soon).Testing#
Test Card Numbers (Sandbox)#
| Card Number | Result |
|---|
| 4111111111111111 | Success |
| 4000000000000002 | Declined (insufficient funds) |
| 4000000000000069 | Declined (expired card) |
| 4000000000000127 | Declined (invalid CVV) |
Note: Use any future expiry date and any 3-digit CVV.Common Errors#
Duplicate merchant_reference#
Solution: Each merchant_reference must be unique. Use a new reference for each payment attempt.Decryption failed#
Invalid card number#
Solution: Validate card number using Luhn algorithm before encrypting.Client ID not found#
When to Use 3DS Instead#
Regulatory requirements (PSD2 in Europe)
Liability shift to card issuer
Support#
Modified at 2026-01-13 10:54:37