{"openapi":"3.1.0","info":{"title":"Check Digit Validator","version":"1.0.0","summary":"Validate IBAN, ISBN, EAN/UPC and card numbers — and find the one wrong digit.","description":"Checks the checksum on an IBAN, ISBN-10/13, EAN-13/UPC-A, or Luhn-checked card number, and when it fails, searches for the single substitution or adjacent transposition that would make it valid so you know which digit to fix rather than just that something is wrong.\n\n**Not for:** This is arithmetic verification only. A passing checksum means the number is internally consistent, not that the IBAN belongs to a real open account, that the ISBN is assigned to a real book, or that the card is active, unstolen, or has funds — those all require calling the issuing bank, registry, or network. It does not verify BIC/SWIFT codes, validate card numbers against issuer IIN/BIN ranges beyond Luhn, or handle non-ISO-13616 domestic account formats (e.g. US routing numbers, which use a different checksum). When more than one single-digit fix would satisfy the checksum, it reports the ambiguity instead of picking one.\n\nFree tier: 250 calls per UTC day per caller. Past that, endpoints return 402 with x402 payment requirements. An MCP server exposing the same capabilities is available at https://check-digit.gumballtools.com/api/mcp.","contact":{"url":"https://github.com/bwalvoord/gumball"}},"servers":[{"url":"https://check-digit.gumballtools.com","description":"Production"}],"externalDocs":{"url":"https://check-digit.gumballtools.com/llms-full.txt","description":"Full documentation for agents"},"paths":{"/api/v1/run":{"get":{"operationId":"run","summary":"Validate IBAN, ISBN, EAN/UPC and card numbers — and find the one wrong digit.","description":"Checks the check digit(s) on the given number under the given format, and on failure searches for the single character error (adjacent transposition, then substitution) that would explain it.","parameters":[{"name":"input","in":"query","required":true,"description":"The number to check. Spaces and hyphens are stripped automatically.","schema":{"type":"string"}},{"name":"format","in":"query","required":true,"description":"Which checksum to apply. Never auto-detected.","schema":{"type":"string","enum":["iban","isbn10","isbn13","ean13","upca","luhn"]}}],"responses":{"200":{"description":"The result.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input. The body names the field and how to fix it.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","fix_hint","docs"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string"},"fix_hint":{"type":"string","description":"What to change before retrying."},"field":{"type":"string"},"token":{"type":"string"},"examples":{"type":"array","items":{"type":"string"}},"docs":{"type":"string","format":"uri"}}}}}}}},"402":{"description":"Free quota of 250 calls per UTC day exhausted. Body is an x402 v1 payment requirement ($0.001 per call). While settlement is disabled the body carries payment_enabled: false and the call cannot be unblocked by paying — wait for quota.resetsAt.","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}