Validate Card (Zero Auth)
POST
/api/v1/bank/wallet/zeroauth/Bearer TokenValidate a card without charging itAuthentication
Include your API key in the Authorization header. See Authentication for details.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
wallet_uuid | UUID | Yes | Wallet identifier |
holder_name | string | Yes | Cardholder name as printed on the card |
card_number | string | Yes | Full card number (PAN) |
expiry_month | string | Yes | Two-digit expiry month (01-12) |
expiry_year | string | Yes | Four-digit expiry year |
cvv | string | Yes | Card verification value |
brand | string | Yes | Card brand: visa, mastercard, amex, elo |
Request example
- cURL
- Python
- JavaScript
curl -X POST https://sandbox.api.a55.tech/api/v1/bank/wallet/zeroauth/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"wallet_uuid":"abc-123","holder_name":"MARIA SILVA",
"card_number":"4111111111111111","expiry_month":"12",
"expiry_year":"2028","cvv":"123","brand":"visa"}'
import requests
resp = requests.post(
"https://sandbox.api.a55.tech/api/v1/bank/wallet/zeroauth/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"wallet_uuid": "abc-123", "holder_name": "MARIA SILVA",
"card_number": "4111111111111111", "expiry_month": "12",
"expiry_year": "2028", "cvv": "123", "brand": "visa"},
)
data = resp.json()
if data["is_valid"]:
print("Card is valid - proceed to tokenize")
else:
print(f"Validation failed - code: {data['code']}")
const resp = await fetch("https://sandbox.api.a55.tech/api/v1/bank/wallet/zeroauth/", {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ wallet_uuid: "abc-123", holder_name: "MARIA SILVA",
card_number: "4111111111111111", expiry_month: "12",
expiry_year: "2028", cvv: "123", brand: "visa" }),
});
const data = await resp.json();
console.log(data.is_valid ? "Valid" : `Failed: ${data.code}`);
Response examples
- Valid Card
- Invalid Card
- Restricted
{ "is_valid": true, "code": "00", "internal_uuid": "za-001" }
{ "is_valid": false, "code": "57", "internal_uuid": "za-002" }
{ "is_valid": false, "code": "389", "internal_uuid": "za-003" }
Response interpretation
Response codes
| Code | Meaning | Recommended action |
|---|---|---|
00 | Approved | Proceed with tokenization or charge |
05 | Do not honor | Ask cardholder to contact issuing bank |
14 | Invalid card number | Prompt re-entry of card details |
54 | Expired card | Request a valid card |
57 | Transaction not permitted | Card restricted for this type |
62 | Restricted card | Contact issuing bank |
63 | Security violation | Do not retry — flag for review |
N7 | CVV mismatch | Re-enter CVV |
91 | Issuer unavailable | Retry after 30 seconds |
96 | System error | Retry after 30 seconds |
389 | Restricted by issuer | Do not retry |
500 | Internal error | Contact A55 support |
Sandbox simulation
In sandbox, zero-auth results are simulated using the same test card rules as charges. Change only the last digit of the card number to trigger approvals (0, 1, 4) or declines (2–8). The endpoint always returns HTTP 200 — check is_valid and code in the response body.
Requires zeroauth_enabled: true on the merchant. Contact your account manager to enable it.
Traceability
Save the internal_uuid from every response — A55 support uses it to trace validation attempts. Combine zero-auth with Tokenization to validate and store a card in one flow.