{
  "openapi": "3.1.0",
  "info": {
    "title": "Open Data Proxy — Pay-per-call IBAN, VAT, Dutch Postcode & CBS Data API",
    "version": "1.0.0",
    "description": "Pay $0.01 USDC per call to validate IBANs, EU VAT numbers and Dutch postcodes, query CBS housing, company, domain and EU sanctions data, and fetch The World Upside Down budget numbers as normalized rows on Base Mainnet.",
    "x-guidance": "Pay-per-call x402 API on https://cbs.thesoulnetwork.eu. Each paid endpoint answers 402 Payment Required without a ticket; pay once for a 1-hour unlimited ticket. See /llms.txt for a question-to-endpoint map.",
    "contact": {
      "email": "info@thesoulnetwork.eu"
    }
  },
  "x-service-info": {
    "categories": [
      "data"
    ],
    "docs": {
      "homepage": "https://cbs.thesoulnetwork.eu",
      "llms": "https://cbs.thesoulnetwork.eu/llms.txt"
    }
  },
  "paths": {
    "/iban": {
      "get": {
        "operationId": "iban",
        "summary": "Use GET /iban?value=… to check checksum validity and retrieve bank name, country and BIC.",
        "tags": [
          "iban",
          "bank",
          "bic",
          "sepa",
          "fintech"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "iban": {
                      "type": "string"
                    },
                    "valid": {
                      "type": "boolean"
                    },
                    "bank": {
                      "type": "string"
                    },
                    "country": {
                      "type": "string"
                    },
                    "bic": {
                      "type": "string"
                    },
                    "checksum": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                },
                "required": [
                  "value"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "value",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/vat": {
      "get": {
        "operationId": "vat",
        "summary": "Use GET /vat?value=… to validate a VAT number against the EU VIES service. Responses are cached for 24h.",
        "tags": [
          "vat",
          "vies",
          "tax",
          "b2b",
          "eu"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "valid": {
                      "type": "boolean"
                    },
                    "input": {
                      "type": "string"
                    },
                    "registeredName": {
                      "type": "string"
                    },
                    "country": {
                      "type": "string"
                    },
                    "vatNumber": {
                      "type": "string"
                    },
                    "requestDate": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                },
                "required": [
                  "value"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "value",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/postcode": {
      "get": {
        "operationId": "postcode",
        "summary": "Use GET /postcode?code=…&number=… to expand a Dutch postcode into street, city, municipality, province and coordinates.",
        "tags": [
          "postcode",
          "address",
          "netherlands",
          "bag",
          "geocoding"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "input": {
                      "type": "string"
                    },
                    "houseNumber": {
                      "type": "string"
                    },
                    "street": {
                      "type": "string"
                    },
                    "city": {
                      "type": "string"
                    },
                    "municipality": {
                      "type": "string"
                    },
                    "province": {
                      "type": "string"
                    },
                    "lat_lon": {
                      "type": "string"
                    },
                    "valid": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "number": {
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "number"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "code",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "number",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/cbs/housing-snapshot": {
      "get": {
        "operationId": "cbs-housing-snapshot",
        "summary": "Use GET /cbs/housing-snapshot?postcode=… to read median WOZ value, transaction volume and price trend from CBS table 85773NED.",
        "tags": [
          "cbs",
          "housing",
          "woz",
          "netherlands",
          "real-estate"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "input": {
                      "type": "string"
                    },
                    "medianWOZ": {
                      "type": "integer"
                    },
                    "transactionVolume": {
                      "type": "integer"
                    },
                    "priceTrend": {
                      "type": "number"
                    },
                    "postcode": {
                      "type": "string"
                    },
                    "timestamp": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "postcode": {
                    "type": "string"
                  }
                },
                "required": [
                  "postcode"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "postcode",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/domain/bundle": {
      "get": {
        "operationId": "domain-bundle",
        "summary": "Use GET /domain/bundle?domain=… to bundle RDAP registration data, MX/SPF/DMARC mail grading, SSL expiry and a tech-stack heuristic into one call.",
        "tags": [
          "rdap",
          "domain",
          "dns",
          "dmarc",
          "spf"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "trustScore": {
                      "type": "integer"
                    },
                    "mailGrade": {
                      "type": "object",
                      "properties": {
                        "grade": {
                          "type": "string"
                        },
                        "score": {
                          "type": "integer"
                        }
                      }
                    },
                    "sslInfo": {
                      "type": "object",
                      "properties": {
                        "daysToExpiry": {
                          "type": "integer"
                        }
                      }
                    },
                    "assessmentDate": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string"
                  }
                },
                "required": [
                  "domain"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/sanctions": {
      "get": {
        "operationId": "sanctions",
        "summary": "Use GET /sanctions?name=… to fuzzy-match a name against the EU consolidated sanctions list and return a confidence score plus the matched entity.",
        "tags": [
          "sanctions",
          "compliance",
          "kyc",
          "aml",
          "eu"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "input": {
                      "type": "string"
                    },
                    "match": {
                      "type": "boolean"
                    },
                    "confidence": {
                      "type": "string"
                    },
                    "matched": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "category": {
                          "type": "string"
                        }
                      }
                    },
                    "listSize": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/upsidedown/v1/dataset": {
      "get": {
        "operationId": "upsidedown-v1-dataset",
        "summary": "Use GET /upsidedown/v1/dataset to fetch every published country as long-format rows (country × metric) with unit, currency, data year, status, publisher, source URL and calculation.",
        "tags": [
          "upsidedown",
          "budget",
          "government",
          "open-data",
          "normalized"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "country_count": {
                      "type": "integer"
                    },
                    "countries": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "rows": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "country": {
                            "type": "string"
                          },
                          "iso": {
                            "type": "string"
                          },
                          "metric": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          },
                          "value": {
                            "type": "integer"
                          },
                          "unit": {
                            "type": "string"
                          },
                          "currency": {
                            "type": "string"
                          },
                          "data_year": {
                            "type": "integer"
                          },
                          "source_year": {
                            "type": "integer"
                          },
                          "status": {
                            "type": "string"
                          },
                          "publisher": {
                            "type": "string"
                          },
                          "source_url": {
                            "type": "string"
                          },
                          "calculation": {
                            "type": "string"
                          },
                          "note": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/upsidedown/v1/dataset.csv": {
      "get": {
        "operationId": "upsidedown-v1-dataset-csv",
        "summary": "Use GET /upsidedown/v1/dataset.csv to download the same normalized rows as CSV: country, iso, metric, label, value, daily_value, unit, currency, data_year, source_year, status, publisher, source_url, calculation, note.",
        "tags": [
          "upsidedown",
          "budget",
          "csv",
          "spreadsheet",
          "open-data"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/upsidedown/v1/countries/{iso}": {
      "get": {
        "operationId": "upsidedown-v1-countries-iso",
        "summary": "Use GET /upsidedown/v1/countries/{iso} to fetch one published country as normalized rows plus its country metadata (currency, data year, fact-check state, publication date).",
        "tags": [
          "upsidedown",
          "country",
          "budget",
          "normalized",
          "open-data"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "country": {
                      "type": "string"
                    },
                    "iso": {
                      "type": "string"
                    },
                    "currency": {
                      "type": "string"
                    },
                    "data_year": {
                      "type": "integer"
                    },
                    "published_date": {
                      "type": "string"
                    },
                    "factcheck_reviewed": {
                      "type": "boolean"
                    },
                    "rows": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "metric": {
                            "type": "string"
                          },
                          "value": {
                            "type": "integer"
                          },
                          "unit": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    }
  }
}
