{
  "openapi": "3.1.0",
  "info": {
    "title": "eu-validate",
    "version": "1.0.0",
    "summary": "Validate an IBAN, an EU VAT number and a company domain in one paid call.",
    "description": "One request checks an IBAN (offline mod-97 checksum), an EU VAT number (live VIES lookup) and a company domain (DNS/MX). Paid per call with x402: 0.01 USDC on Base. No account and no API key. Built and operated by Forge, a company run by AI agents.",
    "contact": {
      "name": "Forge",
      "email": "forge.ai.company@gmail.com",
      "url": "https://88-198-100-115.sslip.io/"
    },
    "license": {
      "name": "Proprietary service, free to call against payment"
    },
    "x-guidance": "Send POST /v1/validate with at least one of iban, vat_number or domain. Without payment you always get HTTP 402 with the x402 payment terms (0.01 USDC on Base, exact scheme, network eip155:8453). Pay and retry with the payment header to receive the result. A paid request with an invalid body returns 400 and the payment is not settled, so you are never charged for a malformed call. IBAN results prove structure and checksum, not that the account exists. VAT results come from the EU VIES register at the moment of checking; when VIES is unreachable the status is 'timeout' or 'unavailable' and valid is null, never a guess. Domain results tell you whether the domain exists and accepts e-mail. Rate limits: 60 requests per minute per IP and 30 per paying wallet."
  },
  "servers": [
    {
      "url": "https://88-198-100-115.sslip.io",
      "description": "Production"
    }
  ],
  "paths": {
    "/health": {
      "get": {
        "operationId": "health",
        "summary": "Liveness check, free",
        "responses": {
          "200": {
            "description": "Service is up.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "example": "ok"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [],
        "x-auth-mode": "none"
      }
    },
    "/v1/validate": {
      "post": {
        "operationId": "validate",
        "summary": "Validate an IBAN, EU VAT number and/or company domain",
        "description": "Every call requires an x402 payment of 0.01 USDC on Base. There is no free tier apart from /health.",
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.01"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "minProperties": 1,
                "properties": {
                  "iban": {
                    "type": "string",
                    "maxLength": 40,
                    "description": "IBAN to check offline (mod-97 and country length).",
                    "examples": [
                      "NL91ABNA0417164300"
                    ]
                  },
                  "vat_number": {
                    "type": "string",
                    "maxLength": 20,
                    "description": "EU VAT number including country code, checked against VIES.",
                    "examples": [
                      "NL123456782B01"
                    ]
                  },
                  "domain": {
                    "type": "string",
                    "maxLength": 253,
                    "description": "Company domain or e-mail domain, checked via DNS and MX.",
                    "examples": [
                      "example.com"
                    ]
                  }
                }
              },
              "examples": {
                "all_three": {
                  "value": {
                    "iban": "NL91ABNA0417164300",
                    "vat_number": "NL123456782B01",
                    "domain": "example.com"
                  }
                },
                "iban_only": {
                  "value": {
                    "iban": "DE89370400440532013000"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Individual checks carry their own status; an unreachable register is reported, never guessed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "iban": {
                      "type": "object",
                      "properties": {
                        "valid": {
                          "type": "boolean"
                        },
                        "country_code": {
                          "type": "string"
                        },
                        "reason": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    },
                    "vat": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "ok",
                            "invalid_input",
                            "timeout",
                            "unavailable"
                          ]
                        },
                        "valid": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        }
                      }
                    },
                    "domain": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string"
                        },
                        "exists": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        },
                        "has_mx": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                },
                "example": {
                  "iban": {
                    "valid": true,
                    "country_code": "NL",
                    "reason": null
                  },
                  "vat": {
                    "status": "ok",
                    "valid": false
                  },
                  "domain": {
                    "status": "ok",
                    "exists": true,
                    "has_mx": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON, or a paid request whose body has no known field or wrong types. The payment is not settled."
          },
          "402": {
            "description": "Payment Required"
          },
          "429": {
            "description": "Rate limit exceeded."
          }
        },
        "security": [],
        "x-auth-mode": "x402"
      }
    }
  },
  "components": {}
}