{"openapi":"3.1.0","info":{"title":"Payment Test Data API","version":"1.1.0","description":"Versioned test-card references plus structurally valid IBAN generation and validation for development and QA workflows.","x-api-version":"v1","x-data-version":"2026-07-30","x-data-checked-at":"2026-07-30","x-iban-data-version":"ibantools-4.5.4-2026-07-30","x-iban-data-checked-at":"2026-07-30"},"servers":[{"url":"https://www.generate-credit-card.com"}],"paths":{"/api/v1/test-cards":{"get":{"operationId":"listTestCards","summary":"List and filter payment-provider test cards","description":"Scenario matching is exact after lowercasing and normalizing separators. It checks category, outcome, provider codes, dispute type, trigger amount, full description, and tags.","parameters":[{"name":"provider","in":"query","schema":{"type":"string","enum":["stripe","adyen","checkout","airwallex"]}},{"name":"category","in":"query","schema":{"type":"string","enum":["successful","declined","fraud","disputes","regulatory","3ds","captcha","pin_payments","non_card","by_country","response_codes","verification","advanced","amount_based","digital_wallets","avs","regional"]}},{"name":"brand","in":"query","schema":{"type":"string","enum":["visa","mastercard","amex","discover","diners","jcb","unionpay","cartes_bancaires","eftpos","bccard","dinacard","maestro","bancontact","visa_electron","v_pay","uatp","dci"]}},{"name":"scenario","in":"query","description":"Normalized scenario identifier, provider response/error code, dispute type, outcome, trigger amount, full description, or tag.","schema":{"type":"string","minLength":1,"maxLength":100},"examples":{"insufficientFunds":{"value":"insufficient-funds"},"threeDS":{"value":"3ds"},"providerCode":{"value":"issuer_declined"}}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"A filtered page of test-card records with provenance metadata.","headers":{"X-API-Version":{"schema":{"type":"string"}},"X-Data-Version":{"schema":{"type":"string"}},"Link":{"description":"OpenAPI service description.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCardListResponse"}}}},"400":{"description":"An invalid query parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error."}}}},"/api/v1/ibans":{"get":{"operationId":"generateIbans","summary":"Generate structurally valid IBAN test data","description":"Structurally valid test data only. A valid checksum does not prove that a bank or account exists.","parameters":[{"name":"country","in":"query","description":"ISO 3166-1 alpha-2 code for an official IBAN Registry country.","schema":{"type":"string","enum":["AX","AL","AD","AT","AZ","BH","BY","BE","BA","BR","VG","BG","CR","HR","CY","CZ","DK","DO","EG","SV","EE","FO","FI","FR","GF","PF","TF","GE","DE","GI","GR","GL","GP","GT","HU","IS","IQ","IE","IL","IT","JO","KZ","XK","KW","LV","LB","LY","LI","LT","LU","MT","MQ","MR","MU","YT","MD","MC","MN","ME","NL","NC","NI","MK","NO","OM","PK","PS","PL","PT","QA","RE","RO","RU","SM","ST","SA","RS","SC","SK","SI","SO","ES","LC","MF","PM","SD","SE","CH","TL","TN","TR","UA","AE","GB","VA","WF","YE"],"default":"DE"}},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":20,"default":5}}],"responses":{"200":{"description":"Generated IBAN test data with source and rule metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IbanGenerationResponse"}}}},"400":{"description":"An invalid country or count.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"IBAN generation failed."}}}},"/api/v1/ibans/countries":{"get":{"operationId":"listIbanCountries","summary":"List supported official IBAN Registry countries","responses":{"200":{"description":"Supported countries and their public IBAN structure metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IbanCountriesResponse"}}}}}}},"/api/v1/ibans/validate":{"post":{"operationId":"validateIban","summary":"Validate an IBAN without placing it in the request URL","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["iban"],"properties":{"iban":{"type":"string","minLength":1,"maxLength":64}}}}}},"responses":{"200":{"description":"Structural, checksum, and country-rule validation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IbanValidationResponse"}}}},"400":{"description":"Invalid JSON or missing IBAN input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"TestCard":{"type":"object","required":["id","provider","brand","number","expMonth","expYear","cvc","description","category","tags"],"properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["stripe","adyen","checkout","airwallex"]},"brand":{"type":"string","enum":["visa","mastercard","amex","discover","diners","jcb","unionpay","cartes_bancaires","eftpos","bccard","dinacard","maestro","bancontact","visa_electron","v_pay","uatp","dci"]},"number":{"type":"string","pattern":"^\\d{13,19}$"},"expMonth":{"type":"string","pattern":"^(0[1-9]|1[0-2])$"},"expYear":{"type":"string","pattern":"^\\d{4}$"},"cvc":{"type":"string","pattern":"^\\d{3,4}$"},"description":{"type":"string"},"category":{"type":"string","enum":["successful","declined","fraud","disputes","regulatory","3ds","captcha","pin_payments","non_card","by_country","response_codes","verification","advanced","amount_based","digital_wallets","avs","regional"]},"subcategory":{"type":"string"},"cardType":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"country":{"type":"string"},"currency":{"type":"string"},"requiresAction":{"type":"boolean"},"outcome":{"type":"string","enum":["success","decline","challenge","authentication_required"]},"disputeType":{"type":"string"},"declineCode":{"type":"string"},"responseCode":{"type":"string"},"responseDescription":{"type":"string"},"triggerAmount":{"type":"string"},"errorCode":{"type":"string"},"errorMessage":{"type":"string"},"avsResponse":{"type":"string"},"cvcResponse":{"type":"string"},"supportsVerification":{"type":"boolean"},"supportsIncrementalAuth":{"type":"boolean"},"supportsApplePay":{"type":"boolean"},"supportsGooglePay":{"type":"boolean"}}},"ProviderSource":{"type":"object","required":["provider","name","url","checkedAt"],"properties":{"provider":{"type":"string","enum":["stripe","adyen","checkout","airwallex"]},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"checkedAt":{"type":"string","format":"date"}}},"TestCardListResponse":{"type":"object","required":["meta","data"],"properties":{"meta":{"type":"object","required":["apiVersion","dataVersion","checkedAt","documentation","sources","filters","pagination"],"properties":{"apiVersion":{"type":"string","const":"v1"},"dataVersion":{"type":"string","const":"2026-07-30"},"checkedAt":{"type":"string","format":"date"},"documentation":{"type":"string"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/ProviderSource"},"minItems":4},"filters":{"type":"object"},"pagination":{"type":"object","required":["offset","limit","total","returned","nextOffset","previousOffset"],"properties":{"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1},"total":{"type":"integer","minimum":0},"returned":{"type":"integer","minimum":0},"nextOffset":{"type":["integer","null"],"minimum":0},"previousOffset":{"type":["integer","null"],"minimum":0}}}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/TestCard"}}}},"GeneratedIban":{"type":"object","required":["iban","formatted","countryCode","countryName","checkDigits","bban","ibanLength","isSepa","valid"],"properties":{"iban":{"type":"string","pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]+$"},"formatted":{"type":"string"},"countryCode":{"type":"string","enum":["AX","AL","AD","AT","AZ","BH","BY","BE","BA","BR","VG","BG","CR","HR","CY","CZ","DK","DO","EG","SV","EE","FO","FI","FR","GF","PF","TF","GE","DE","GI","GR","GL","GP","GT","HU","IS","IQ","IE","IL","IT","JO","KZ","XK","KW","LV","LB","LY","LI","LT","LU","MT","MQ","MR","MU","YT","MD","MC","MN","ME","NL","NC","NI","MK","NO","OM","PK","PS","PL","PT","QA","RE","RO","RU","SM","ST","SA","RS","SC","SK","SI","SO","ES","LC","MF","PM","SD","SE","CH","TL","TN","TR","UA","AE","GB","VA","WF","YE"]},"countryName":{"type":"string"},"checkDigits":{"type":"string","pattern":"^[0-9]{2}$"},"bban":{"type":"string"},"ibanLength":{"type":"integer","minimum":15,"maximum":34},"isSepa":{"type":"boolean"},"valid":{"type":"boolean","const":true}}},"IbanCountry":{"type":"object","required":["code","name","ibanLength","bbanLength","bbanPattern","isSepa"],"properties":{"code":{"type":"string","enum":["AX","AL","AD","AT","AZ","BH","BY","BE","BA","BR","VG","BG","CR","HR","CY","CZ","DK","DO","EG","SV","EE","FO","FI","FR","GF","PF","TF","GE","DE","GI","GR","GL","GP","GT","HU","IS","IQ","IE","IL","IT","JO","KZ","XK","KW","LV","LB","LY","LI","LT","LU","MT","MQ","MR","MU","YT","MD","MC","MN","ME","NL","NC","NI","MK","NO","OM","PK","PS","PL","PT","QA","RE","RO","RU","SM","ST","SA","RS","SC","SK","SI","SO","ES","LC","MF","PM","SD","SE","CH","TL","TN","TR","UA","AE","GB","VA","WF","YE"]},"name":{"type":"string"},"ibanLength":{"type":"integer","minimum":15,"maximum":34},"bbanLength":{"type":"integer","minimum":11,"maximum":30},"bbanPattern":{"type":"string"},"isSepa":{"type":"boolean"}}},"IbanValidationResult":{"type":"object","required":["valid","electronic","formatted","countryCode","countryName","checkDigits","bban","ibanLength","expectedLength","isSepa","errorCodes"],"properties":{"valid":{"type":"boolean"},"electronic":{"type":"string"},"formatted":{"type":"string"},"countryCode":{"type":["string","null"]},"countryName":{"type":["string","null"]},"checkDigits":{"type":["string","null"]},"bban":{"type":["string","null"]},"ibanLength":{"type":"integer","minimum":0},"expectedLength":{"type":["integer","null"]},"isSepa":{"type":["boolean","null"]},"errorCodes":{"type":"array","items":{"type":"string"}}}},"IbanGenerationResponse":{"type":"object","required":["meta","data"],"properties":{"meta":{"type":"object"},"data":{"type":"array","minItems":1,"maxItems":20,"items":{"$ref":"#/components/schemas/GeneratedIban"}}}},"IbanCountriesResponse":{"type":"object","required":["meta","data"],"properties":{"meta":{"type":"object"},"data":{"type":"array","items":{"$ref":"#/components/schemas/IbanCountry"}}}},"IbanValidationResponse":{"type":"object","required":["meta","data"],"properties":{"meta":{"type":"object"},"data":{"$ref":"#/components/schemas/IbanValidationResult"}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","parameter","value"],"properties":{"code":{"type":"string","const":"invalid_query_parameter"},"message":{"type":"string"},"parameter":{"type":"string"},"value":{"type":"string"},"allowedValues":{"type":"array","items":{"type":"string"}}}}}}}}}