PAID ADD-ON (not included in any plan by default) — card acquirer catalogue, per-acquirer field requirements, PAN/BIN validation and 3-D Secure 2 data checks
GET https://secure.utilitypro.eu/api/v1/cards/acquirers
List Card Acquirers — Discover the card acquirers available for a corridor, with capabilities and integration styles
Returns the card acquiring connections available for a country and currency, the transaction types each one supports (authorisation, capture, purchase, refund, void, payout, recurring), whether it offers a hosted payment page or a server-to-server integration, and whether Google Pay and Apple Pay are supported. Use this to decide which acquirer to route a card transaction to before you collect any card data.
| Name | Type | Required | Description | Example |
|---|
country_code | string | no | ISO 2-letter country code of the cardholder or the merchant entity | DE |
currency_code | string | no | ISO 3-letter settlement currency | EUR |
integration | string | no | hosted_page or direct_connect | direct_connect |
capability | string | no | Filter by capability: authorisation, capture, purchase, refund, void, payout, recurring | purchase |
Example response
{
"country_code": "DE",
"currency_code": "EUR",
"integration": "direct_connect",
"total": 1,
"acquirers": [
{
"acquirer": "DECTA",
"display_name": "Decta",
"schemes": [
"VISA",
"MASTERCARD"
],
"currencies": [],
"currency_notes": null,
"countries": [],
"country_notes": null,
"integrations": [
"hosted_page",
"direct_connect"
],
"capabilities": [
"authorisation",
"capture",
"purchase",
"refund",
"void"
],
"wallets": [
"google_pay",
"apple_pay"
],
"supports_3ds": true,
"data_confidence": "verified",
"notes": null
}
]
}
- An empty currencies or countries array means the acquirer is not restricted on that dimension
- Omit all filters to list the full acquirer catalogue
GET https://secure.utilitypro.eu/api/v1/cards/requirements
Card Field Requirements — The exact payer, billing, card and 3-D Secure browser fields one acquirer needs
Returns the canonical field schema for a given acquirer and integration style. Fields are namespaced into customer.*, billing.*, card.* and browser.* groups so you can build a single collection form and map it to any acquirer. Server-to-server (direct_connect) integrations additionally require 3-D Secure 2 browser data; hosted page integrations do not, because the acquirer collects the card itself.
| Name | Type | Required | Description | Example |
|---|
acquirer | string | yes | Acquirer code from GET /acquirers | DECTA |
integration | string | no | hosted_page or direct_connect (default direct_connect) | direct_connect |
Example response
{
"acquirer": "DECTA",
"display_name": "Decta",
"integration": "direct_connect",
"total_required": 19,
"required_fields": [
{
"field_name": "card.number",
"display_name": "Card number",
"data_type": "card_number",
"required": true,
"example": "4111111111111111",
"description": "Primary account number (PAN). Validated with the Luhn checksum and scheme detection.",
"validation_rule": "card_pan",
"display_order": 20
}
]
}
- billing.state and billing.postal_code are mandatory whenever the billing country is US or CA
- browser.* fields are 3-D Secure 2 data and only appear on direct_connect integrations
POST https://secure.utilitypro.eu/api/v1/cards/validate
Validate Card Transaction Fields — Validate a complete card payload against one acquirer before you send it
Checks every field an acquirer requires: Luhn checksum and scheme length rules on the PAN, scheme-aware CVV length, expiry month/year plus a combined expired-card check, E.164 mobile, email syntax, ISO country, US/CA postal formats, date of birth with an 18+ rule, and IPv4/IPv6. Card data is never stored and never echoed back: the PAN is returned masked and the CVV is never returned.
| Name | Type | Required | Description | Example |
|---|
acquirer | string | yes | Acquirer code | DECTA |
integration | string | no | hosted_page or direct_connect (default direct_connect) | |
fields | object | yes | Map of field_name to value using the keys from GET /requirements | |
Example request
{
"acquirer": "DECTA",
"integration": "direct_connect",
"fields": {
"customer.first_name": "John",
"customer.last_name": "Smith",
"customer.email": "john.smith@example.com",
"customer.ip_address": "212.152.12.12",
"billing.city": "Valletta",
"card.number": "4111111111111111",
"card.holder_name": "John Smith",
"card.expiry_month": "05",
"card.expiry_year": "2029",
"card.cvv": "123"
}
}
Example response
{
"acquirer": "DECTA",
"display_name": "Decta",
"integration": "direct_connect",
"valid": false,
"detected_scheme": "VISA",
"total_checked": 19,
"error_count": 1,
"fields": [
{
"field_name": "card.number",
"display_name": "Card number",
"valid": true,
"value_normalized": "411111******1111",
"detected_type": "VISA",
"error": null,
"code": null
}
],
"errors": [
{
"field_name": "browser.user_agent",
"display_name": "Browser user agent",
"valid": false,
"error": "Browser user agent is required.",
"code": "MISSING_FIELD"
}
],
"unknown_fields": [],
"normalized": {}
}
- Returns HTTP 422 when any field fails so you can branch on the status code
- card.number is returned masked and card.cvv is never returned or logged
- A card.expiry entry with code CARD_EXPIRED is added when the month/year combination is in the past
POST https://secure.utilitypro.eu/api/v1/cards/card-lookup
BIN / Scheme Lookup — Detect the scheme, BIN and Luhn validity of a card number
| Name | Type | Required | Description | Example |
|---|
card_number | string | yes | Card number (PAN) | 4111111111111111 |
Example request
{
"card_number": "4111111111111111"
}
Example response
{
"valid": true,
"scheme": "VISA",
"bin": "41111111",
"last4": "1111",
"length": 16,
"luhn_valid": true,
"error": null
}
- Supports VISA, MASTERCARD, AMEX, MAESTRO, DISCOVER, DINERS, JCB, UNIONPAY and UATP ranges