{
  "openapi": "3.0.1",
  "info": {
    "title": "SiteVerdict — VAT & Company Number Validator (UK, EU)",
    "description": "Bulk-check EU, UK and Northern Ireland VAT numbers, UK company numbers and LEIs. Free local checksum first, then official VIES, HMRC, Companies House and GLEIF lookups with name match, consultation numbers and a timestamped audit trail.",
    "version": "1.0",
    "x-build-id": "jXKgZWPa7Tr5PMThL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/siteverdict~siteverdict-vat-validator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-siteverdict-siteverdict-vat-validator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/siteverdict~siteverdict-vat-validator/runs": {
      "post": {
        "operationId": "runs-sync-siteverdict-siteverdict-vat-validator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/siteverdict~siteverdict-vat-validator/run-sync": {
      "post": {
        "operationId": "run-sync-siteverdict-siteverdict-vat-validator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "numbers": {
            "title": "Numbers to check",
            "type": "array",
            "description": "One per line. Optional name and your own reference after a | (or ; or tab): <code>DE136695976 | Acme GmbH | INV-1001</code>. Use a country prefix for VAT numbers (DE, FR, EL/GR, GB, XI...). You can paste a whole spreadsheet column.",
            "items": {
              "type": "string"
            }
          },
          "items": {
            "title": "Items (JSON, optional)",
            "type": "array",
            "description": "Alternative to the list above, e.g. from another Actor: <code>[{\"number\": \"FR40303265045\", \"name\": \"Example SA\", \"reference\": \"PO-7\", \"type\": \"vat\", \"country\": \"FR\"}]</code>. <code>type</code> (vat / uk_company / lei) and <code>country</code> are optional."
          },
          "checkMode": {
            "title": "Check mode",
            "enum": [
              "registry",
              "format_only"
            ],
            "type": "string",
            "description": "Format-only never calls a registry: it tells you which numbers are impossible (wrong length, bad check digit) at the lowest price.",
            "default": "registry"
          },
          "numberType": {
            "title": "Number type",
            "enum": [
              "auto",
              "vat",
              "uk_company",
              "lei"
            ],
            "type": "string",
            "description": "Auto: 20-character codes with a valid ISO 17442 checksum are LEIs, numbers with a known VAT prefix are VAT numbers, 8-character numbers like 03977902 / SC123456 are UK company numbers.",
            "default": "auto"
          },
          "defaultCountry": {
            "title": "Default VAT country (for numbers without a prefix)",
            "enum": [
              "",
              "AT",
              "BE",
              "BG",
              "CY",
              "CZ",
              "DE",
              "DK",
              "EE",
              "EL",
              "ES",
              "FI",
              "FR",
              "HR",
              "HU",
              "IE",
              "IT",
              "LT",
              "LU",
              "LV",
              "MT",
              "NL",
              "PL",
              "PT",
              "RO",
              "SE",
              "SI",
              "SK",
              "GB",
              "XI"
            ],
            "type": "string",
            "description": "Applied only to VAT numbers typed without a country prefix.",
            "default": ""
          },
          "viesRequesterVat": {
            "title": "Your EU / XI VAT number (for VIES consultation numbers)",
            "type": "string",
            "description": "Optional. When set, VIES returns a consultation number (request identifier) for each check - your proof to the tax authority that you checked. Example: DE123456789."
          },
          "viesApproximateMatch": {
            "title": "Ask VIES to match the supplied name",
            "type": "boolean",
            "description": "Sends your supplied name to VIES. Some countries that hide the registered name (e.g. Germany, Spain) can still answer VALID/INVALID for the name. A local fuzzy name score is always computed when the registry returns a name.",
            "default": true
          },
          "includeRegisteredDetails": {
            "title": "Output registered name and address",
            "type": "boolean",
            "description": "Name and address exactly as returned by the registry. For sole traders this is personal data - untick if you only need valid/invalid and a match score.",
            "default": true
          },
          "storeEvidence": {
            "title": "Store raw registry responses as evidence",
            "type": "boolean",
            "description": "Saves each registry response (timestamped, with SHA-256) to the run's key-value store; the row's evidence_key points to it.",
            "default": true
          },
          "hmrcClientId": {
            "title": "HMRC client ID",
            "type": "string",
            "description": "Needed to check GB VAT numbers. HMRC's 'Check a UK VAT number' API v2.0 requires your OWN HMRC Developer Hub application (free; subscribe it to the API). Without it, GB numbers are format/checksum-checked only."
          },
          "hmrcClientSecret": {
            "title": "HMRC client secret",
            "type": "string",
            "description": "The client secret of the same HMRC application. Stored encrypted by Apify; never logged or output."
          },
          "hmrcEnvironment": {
            "title": "HMRC environment",
            "enum": [
              "production",
              "sandbox"
            ],
            "type": "string",
            "description": "Use sandbox while HMRC reviews your production access.",
            "default": "production"
          },
          "hmrcRequesterVrn": {
            "title": "Your UK VAT number (for HMRC consultation numbers)",
            "type": "string",
            "description": "Optional. With it, HMRC returns a consultation number for each verified check."
          },
          "companiesHouseApiKey": {
            "title": "Companies House API key",
            "type": "string",
            "description": "Optional, free from developer.company-information.service.gov.uk (REST key). Needed to check UK company numbers against the register; otherwise they are format-checked only."
          },
          "leiEnrichment": {
            "title": "Add LEI for UK companies (GLEIF)",
            "type": "boolean",
            "description": "For UK company numbers found at Companies House, also look up any LEI registered against that number in the open GLEIF index (no extra charge).",
            "default": false
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel checks. Registries are also rate-limited per source (VIES one request at a time per member state).",
            "default": 4
          },
          "viesRequestsPerSecond": {
            "title": "VIES requests per second",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep this low: VIES is a shared public service and answers MS_MAX_CONCURRENT_REQ when overloaded.",
            "default": 2
          },
          "unavailableRetryRounds": {
            "title": "Retry rounds for unavailable registries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Member-state databases go offline (often at night or weekends). Numbers that hit an outage are retried at the end of the run. Still unavailable = status 'unavailable', never charged.",
            "default": 2
          },
          "unavailableRetryDelaySecs": {
            "title": "Wait before each retry round (seconds)",
            "minimum": 5,
            "maximum": 900,
            "type": "integer",
            "description": "Pause between the main pass and each retry round, giving the member-state database time to come back.",
            "default": 60
          },
          "maxItems": {
            "title": "Max numbers (0 = all)",
            "minimum": 0,
            "type": "integer",
            "description": "Process only the first N inputs.",
            "default": 0
          },
          "sampleMode": {
            "title": "Sample mode (no network, no charges)",
            "type": "boolean",
            "description": "Runs on recorded VIES/GLEIF responses and documented HMRC/Companies House examples so you can see the output format for free.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}