Overview
The IsValid API is a REST API that returns JSON responses. All endpoints are available at the base URL:
https://api.isvalid.devAll requests must include a valid API key in the Authorization header. Responses include a valid boolean field indicating whether the provided value passed validation.
Authentication
Authenticate API requests using a Bearer token in the Authorization header. You can find your API key in your account dashboard.
Authorization: Bearer YOUR_API_KEYKeep your API key secret. Never expose it in client-side code or public repositories. Rotate your key immediately if you believe it has been compromised.
Example request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/email?value=user@example.com"Rate Limiting
API usage is limited based on your subscription plan. Rate limits reset at midnight UTC each day.
| Plan | API Keys | Calls / day | Price |
|---|---|---|---|
| Free | 1 | 100 | $0/month |
When you exceed your limit, the API returns HTTP 429. The response includes a Retry-After header indicating when your quota resets.
Error Responses
The API uses standard HTTP status codes. Error responses always include a JSON body with a message field describing the error.
| Status Code | Meaning | Description |
|---|---|---|
| 200 OK | Success | The request succeeded. Check the valid field in the response body. |
| 400 Bad Request | Invalid input | Missing or malformed required parameters. |
| 401 Unauthorized | Authentication failed | API key is missing, invalid, or expired. |
| 404 Not Found | Unknown endpoint | The requested endpoint does not exist. |
| 422 Unprocessable Entity | Validation schema error | The request body or parameters did not match the expected schema. |
| 429 Too Many Requests | Rate limit exceeded | You have exceeded your plan's daily request quota. |
| 500 Internal Server Error | Server error | An unexpected error occurred on our end. Retry after a moment. |
Error Response Body
{
"error": "Missing required query parameter: value"
}ABA Routing Number
Validates a 9-digit ABA routing transit number (RTN) used by U.S. financial institutions for ACH transfers, wire transfers, and direct deposits. Verifies the check digit using the standard weighted-sum algorithm and extracts the Federal Reserve district encoded in the routing symbol. Spaces and hyphens in the input are stripped automatically.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The 9-digit ABA routing number to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/aba?value=102101645"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the routing number passes the ABA check digit algorithm |
| routingNumber | string | The normalized 9-digit routing number (spaces and hyphens removed) |
| federalReservePrefix | string | First two digits — the Federal Reserve routing symbol |
| federalReserveDistrict | string | Name of the Federal Reserve district (e.g. Denver, San Francisco). Omitted when the prefix is not a known district code. |
| abaInstitutionIdentifier | string | Digits 3–8 — the ABA institution identifier assigned to the bank |
| checkDigit | number | The 9th digit used as the check digit |
Example Response
{
"valid": true,
"routingNumber": "102101645",
"federalReservePrefix": "10",
"federalReserveDistrict": "Kansas City",
"abaInstitutionIdentifier": "210164",
"checkDigit": 5
}BIC / SWIFT
Validates a Bank Identifier Code (BIC), also known as a SWIFT code. BIC codes are 8 or 11 characters long and identify financial institutions worldwide.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The BIC/SWIFT code to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/bic?value=DEUTDEDB"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the BIC/SWIFT code is valid |
| bankCode | string | 4-character institution code |
| countryCode | string | ISO 3166-1 alpha-2 country code |
| countryName | string | null | Full English name of the country, or null if the country code is not recognised |
| locationCode | string | 2-character location code |
| branchCode | string | null | 3-character branch code; XXX denotes the primary office. null for 8-character BICs |
| bankName | string | null | Name of the institution if known, or null for institutions not in the built-in directory |
Example Response
{
"valid": true,
"bankCode": "DEUT",
"countryCode": "DE",
"countryName": "Germany",
"locationCode": "DB",
"branchCode": "XXX",
"bankName": "Deutsche Bank"
}BTC Address
Validates whether a string is a valid Bitcoin mainnet address. When valid, the response includes the detected address type.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The Bitcoin address to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/btc-address?value=1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf"]Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value is a valid Bitcoin mainnet address |
| type | string | Address type: P2PKH (Legacy, starts with 1), P2SH (Script hash, starts with 3), P2WPKH (Native SegWit, starts with bc1q), or P2TR (Taproot, starts with bc1p). Omitted when valid is false. |
Example Response
{
"valid": true,
"type": "P2PKH"
}Boolean
Parses and validates boolean-like string values. Accepts common boolean representations including true, false, yes, no, 1, 0, on, off.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The value to parse as boolean |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/boolean?value=yes"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value was recognized as a boolean |
| normalized | boolean | The parsed boolean value (true or false) |
Example Response
{
"valid": true,
"normalized": true
}Color
Validates and parses a CSS color string in hex, RGB, or HSL format. Automatically detects the input format and returns all three representations together with the alpha channel. Supports shorthand hex (#rgb), full hex (#rrggbb), hex with alpha (#rrggbbaa), rgb(), rgba(), hsl(), and hsla().
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The CSS color string to validate and parse |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/color?value=%23ff0000"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value is a recognised CSS color string |
| format | string | Detected input format: hex, rgb, or hsl. Only present when valid is true. |
| r / g / b | number | Red, green, blue components (0–255). Only present when valid is true. |
| h | number | Hue (0–360). Only present when valid is true. |
| s | number | Saturation (0–100). Only present when valid is true. |
| l | number | Lightness (0–100). Only present when valid is true. |
| alpha | number | Opacity (0–1). Defaults to 1 when no alpha channel is specified. Only present when valid is true. |
| hex | string | Normalised hex representation (#rrggbb or #rrggbbaa when alpha < 1). Only present when valid is true. |
Example Response
{
"valid": true,
"format": "hex",
"r": 255,
"g": 0,
"b": 0,
"h": 0,
"s": 100,
"l": 50,
"alpha": 1,
"hex": "#ff0000"
}Country
Validates a country code against the ISO 3166-1 standard. The format is detected automatically from the input: two letters are treated as alpha-2, three letters as alpha-3, and one to three digits as the numeric code (leading zeros are optional). When valid, the response includes all three code representations and the English country name.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The country code to validate. Accepted formats: PL (alpha-2), POL (alpha-3), 616 (numeric) |
Example Requests
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/country?value=PL"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/country?value=POL"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/country?value=616"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the code is a recognised ISO 3166-1 country code |
| value | string | The normalised (uppercased) input value |
| format | string | Detected input format: alpha-2, alpha-3, or numeric |
| alpha2 | string | ISO 3166-1 alpha-2 code (e.g. PL) |
| alpha3 | string | ISO 3166-1 alpha-3 code (e.g. POL) |
| numeric | string | ISO 3166-1 numeric code, zero-padded to 3 digits (e.g. 616) |
| name | string | Full English country name (e.g. Poland) |
Example Response
{
"valid": true,
"value": "PL",
"format": "alpha-2",
"alpha2": "PL",
"alpha3": "POL",
"numeric": "616",
"name": "Poland"
}Returns the complete list of all 249 ISO 3166-1 countries, sorted alphabetically by English name. Useful for populating country selectors in forms.
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/country/list"Response
An array of objects, one per country, sorted alphabetically by name.
| Field | Type | Description |
|---|---|---|
| alpha2 | string | ISO 3166-1 alpha-2 code |
| alpha3 | string | ISO 3166-1 alpha-3 code |
| numeric | string | ISO 3166-1 numeric code, zero-padded to 3 digits |
| name | string | Full English country name |
Example Response
[
{ "alpha2": "AF", "alpha3": "AFG", "numeric": "004", "name": "Afghanistan" },
{ "alpha2": "AX", "alpha3": "ALA", "numeric": "248", "name": "Åland Islands" },
{ "alpha2": "AL", "alpha3": "ALB", "numeric": "008", "name": "Albania" },
...
]Credit Card
Validates credit card numbers using the Luhn algorithm. Accepts cards from Visa, Mastercard, American Express, Discover, JCB, Diners Club, and UnionPay. The card number is sent in the request body to avoid logging sensitive data in server access logs.
Request Body
{
"number": "4111111111111111"
}Example Request
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"number": "4111111111111111"}' \
"https://api.isvalid.dev/v0/credit-card"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the card number is valid |
| network | string | Detected card network (e.g. Visa, Mastercard, Amex) |
| length | number | Number of digits in the card number |
| luhn | boolean | Whether the number passes the Luhn checksum |
Example Response
{
"valid": true,
"network": "Visa",
"length": 16,
"luhn": true
}Currency Code
Validates a currency code against the ISO 4217 standard. Both the three-letter alphabetic code (e.g. PLN) and the three-digit numeric code (e.g. 985) are accepted. Leading zeros in numeric codes are optional. When valid, the response includes the canonical alpha code, numeric code, currency name, and the number of minor units (decimal places) defined by the standard.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The currency code to validate. Accepted formats: PLN (alpha), 985 (numeric) |
Example Requests
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/currency?value=PLN"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/currency?value=985"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/currency?value=USD"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value is a recognised ISO 4217 currency code |
| format | string | Detected input format: alpha or numeric |
| code | string | ISO 4217 three-letter alphabetic code (e.g. PLN) |
| numericCode | string | ISO 4217 three-digit numeric code, zero-padded (e.g. 985) |
| name | string | Official English currency name (e.g. Polish Złoty) |
| minorUnit | number | null | Number of digits after the decimal separator (e.g. 2 for PLN, 0 for JPY). null for commodity codes such as XAU (Gold) |
Example Response
{
"valid": true,
"format": "alpha",
"code": "PLN",
"numericCode": "985",
"name": "Polish Złoty",
"minorUnit": 2
}Returns the full list of ISO 4217 currency codes, including active currencies and special commodity codes (Gold, Silver, SDR, etc.).
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/currency/list"Object Fields
| Field | Type | Description |
|---|---|---|
| code | string | ISO 4217 three-letter alphabetic code |
| numericCode | string | ISO 4217 three-digit numeric code, zero-padded |
| name | string | Official English currency name |
| minorUnit | number | null | Number of decimal places; null for commodity codes (XAU, XAG, etc.) |
Example Response
[
{ "code": "AED", "numericCode": "784", "name": "UAE Dirham", "minorUnit": 2 },
{ "code": "AFN", "numericCode": "971", "name": "Afghan Afghani", "minorUnit": 2 },
...
{ "code": "ZWL", "numericCode": "932", "name": "Zimbabwean Dollar", "minorUnit": 2 }
]Date
Validates date strings against multiple common formats. Checks both format correctness and logical validity (e.g., month 1-12, day within month bounds, leap year rules).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The date string to validate |
| format | string | No | Expected format (e.g., YYYY-MM-DD, DD/MM/YYYY). If omitted, auto-detects. |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/date?value=2026-02-19&format=YYYY-MM-DD"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the date string is valid |
| iso | string | The parsed date in ISO 8601 format (YYYY-MM-DD) |
Example Response
{
"valid": true,
"iso": "2026-02-19"
}EAN Barcode
Validates European Article Numbers (EAN) used globally as product barcodes. Supports both EAN-13 (standard retail barcode) and EAN-8 (compact barcode for small packages). Verifies the check digit using the GS1 weighted-sum algorithm. For EAN-13 codes the GS1 company prefix is decoded and the issuing country or region is returned. Spaces and hyphens in the input are stripped automatically.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The EAN-8 or EAN-13 barcode number to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/ean?value=5901234123457"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the barcode passed checksum validation |
| format | string | Detected barcode format: EAN-13 or EAN-8. Present only when valid is true |
| prefix | string | GS1 company prefix (2–3 digits). Present only for valid EAN-13 codes |
| prefixCountry | string | Country or region that issued the GS1 prefix (e.g. "Poland", "Germany"). Present only for valid EAN-13 codes |
Example Response — EAN-13
{
"valid": true,
"format": "EAN-13",
"prefix": "590",
"prefixCountry": "Poland"
}Example Response — EAN-8
{
"valid": true,
"format": "EAN-8"
}Example Response — invalid
{
"valid": false
}Validates email addresses. Checks RFC 5322 format compliance, domain structure, and optionally verifies that the domain has valid MX records.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The email address to validate |
| checkMx | boolean | No | Check DNS MX records for the domain (default: false) |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/email?value=user@example.com&checkMx=true"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the email address is valid |
| local | string | Local part of the address (before @) |
| domain | string | Domain part of the address (after @) |
| mxValid | boolean | Whether the domain has valid MX records. Only present when checkMx=true |
Example Response
{
"valid": true,
"local": "user",
"domain": "example.com",
"mxValid": true
}IBAN
Validates an International Bank Account Number (IBAN) as defined by ISO 13616. Supports 80+ countries. Verification includes format check, country-specific length validation and the MOD-97 checksum algorithm. Spaces and hyphens in the input are stripped automatically; lowercase letters are accepted.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | Full IBAN (e.g. PL61 1090 1014…) or just the numeric part without the country code prefix when countryCode is provided |
| countryCode | string | No | ISO 3166-1 alpha-2 country code (e.g. PL). Required when value does not include the country code prefix. When provided and value already starts with the same code, it is used as-is |
Example Requests
# Full IBAN
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/iban?value=PL61109010140000071219812874"
# Numeric part only, country code provided separately
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/iban?countryCode=PL&value=61109010140000071219812874"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the IBAN passed all validation checks |
| countryCode | string | ISO 3166-1 alpha-2 country code (e.g. PL) |
| countryName | string | Full country name (e.g. Poland) |
| bban | string | Basic Bank Account Number — the country-specific part after the 4-character IBAN header |
| isEU | boolean | Whether the issuing country is an EU member state |
| formatted | string | IBAN formatted in canonical groups of 4 characters (e.g. PL61 1090 1014 0000 0712 1981 2874) |
Example Response
{
"valid": true,
"countryCode": "PL",
"countryName": "Poland",
"bban": "109010140000071219812874",
"isEU": true,
"formatted": "PL61 1090 1014 0000 0712 1981 2874"
}Example Response — invalid
{
"valid": false
}IMEI
Validates a 15-digit International Mobile Equipment Identity (IMEI) number used to uniquely identify mobile devices. Verifies the check digit using the Luhn algorithm and extracts the Type Allocation Code (TAC) and Serial Number (SNR). Spaces, hyphens, and dots in the input are stripped automatically.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The 15-digit IMEI number to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/imei?value=490154203237518"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the IMEI passed Luhn checksum validation |
| tac | string | Type Allocation Code — first 8 digits identifying the device model and manufacturer |
| snr | string | Serial Number — 6 digits uniquely identifying the device within its TAC |
| checkDigit | string | The Luhn check digit (last digit of the IMEI) |
Example Response
{
"valid": true,
"tac": "49015420",
"snr": "323751",
"checkDigit": "8"
}Example Response — invalid
{
"valid": false
}IP Address
Validates an IP address in IPv4 or IPv6 format. For IPv4, verifies that each octet is in the range 0–255 with no leading zeros. For IPv6, accepts full and compressed (::) notation. Returns the version and a classification of the address type.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The IP address to validate (IPv4 or IPv6). |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/net/ip?value=192.168.1.1"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the IP address is valid. |
| version | number | IP version: 4 or 6. |
| type | string | Address classification. IPv4: public, private, loopback, link-local, multicast, broadcast. IPv6: global-unicast, loopback, link-local, unique-local, multicast. |
| expanded | string | Full expanded IPv6 address (only for IPv6). |
Example Response — IPv4
{
"valid": true,
"version": 4,
"type": "private"
}Example Response — IPv6
{
"valid": true,
"version": 6,
"type": "global-unicast",
"expanded": "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
}Example Response — invalid
{
"valid": false
}ISBN
Validates an International Standard Book Number in both ISBN-10 and ISBN-13 formats. Verifies the check digit using the respective algorithm (mod-11 for ISBN-10, mod-10 weighted for ISBN-13). When valid, both the ISBN-10 and ISBN-13 equivalents are returned — ISBN-13 with prefix 979 has no ISBN-10 equivalent. Spaces and hyphens in the input are stripped automatically.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The ISBN-10 or ISBN-13 number to validate (with or without hyphens) |
Example Requests
# ISBN-13
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/isbn?value=978-0-306-40615-7"
# ISBN-10
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/isbn?value=0-306-40615-2"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the ISBN passed check digit validation |
| format | string | Detected format: ISBN-10 or ISBN-13 |
| isbn10 | string | null | Normalized ISBN-10 (without hyphens). null when the input is ISBN-13 with prefix 979, which has no ISBN-10 equivalent |
| isbn13 | string | Normalized ISBN-13 (without hyphens). Always present for valid inputs |
Example Response — ISBN-13
{
"valid": true,
"format": "ISBN-13",
"isbn10": "0306406152",
"isbn13": "9780306406157"
}Example Response — ISBN-10
{
"valid": true,
"format": "ISBN-10",
"isbn10": "0306406152",
"isbn13": "9780306406157"
}Example Response — invalid
{
"valid": false
}ISSN
Validates an International Standard Serial Number (ISSN) — the global identifier assigned to periodical publications such as journals, magazines and newspapers. Accepts the standard XXXX-XXXX format as well as the 8-character form without a hyphen. The check digit (last character, which may be 0–9 or X for 10) is verified using a mod-11 weighted sum. Spaces and hyphens are stripped automatically before validation.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The ISSN to validate (with or without hyphen, e.g. 0378-5955 or 03785955) |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/issn?value=0378-5955"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the ISSN passed check digit validation |
| issn | string | Normalized ISSN in the canonical XXXX-XXXX format. Present only when valid is true |
Example Response
{
"valid": true,
"issn": "0378-5955"
}Example Response — invalid
{
"valid": false
}JWT
Validates the structure of a JSON Web Token (JWT) and decodes its header and payload. Does not verify the signature — only the token format and structure are checked. Useful for inspecting token contents without a secret or public key.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The JWT string to validate (three base64url-encoded parts separated by dots) |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/jwt?value=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the token has a valid JWT structure (three parts, parseable JSON header and payload, alg field present in header) |
| algorithm | string | The signing algorithm declared in the header, e.g. HS256, RS256. Only present when valid is true. |
| header | object | The decoded JWT header object. Only present when valid is true. |
| payload | object | The decoded JWT payload object. Only present when valid is true. |
| issuedAt | string | null | ISO 8601 timestamp derived from the iat claim, or null if absent. Only present when valid is true. |
| expiresAt | string | null | ISO 8601 timestamp derived from the exp claim, or null if absent. Only present when valid is true. |
| expired | boolean | null | Whether the token is past its expiry time. null when no exp claim is present. Only present when valid is true. |
Example Response
{
"valid": true,
"algorithm": "HS256",
"header": { "alg": "HS256", "typ": "JWT" },
"payload": { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 },
"issuedAt": "2018-01-18T01:30:22.000Z",
"expiresAt": null,
"expired": null
}Language Code
Validates an ISO 639 language code in either the two-letter ISO 639-1 format (e.g. en) or the three-letter ISO 639-2 terminological format (e.g. eng). Covers all 184 ISO 639-1 languages. Input is case-insensitive. When valid, both the alpha-2 and alpha-3 codes are returned together with the English language name.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | ISO 639-1 (2-letter) or ISO 639-2 (3-letter) language code, case-insensitive (e.g. en, eng, PL) |
Example Requests
# ISO 639-1 (alpha-2)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/language?value=pl"
# ISO 639-2 (alpha-3)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/language?value=pol"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value is a recognised ISO 639 language code |
| format | string | Detected input format: alpha-2 or alpha-3 |
| alpha2 | string | null | ISO 639-1 two-letter code |
| alpha3 | string | ISO 639-2 three-letter terminological code |
| name | string | English name of the language |
Example Response
{
"valid": true,
"format": "alpha-2",
"alpha2": "pl",
"alpha3": "pol",
"name": "Polish"
}Example Response — invalid
{
"valid": false
}Returns the complete list of all 184 ISO 639-1 languages sorted alphabetically by English name.
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/language/list"Object Fields
| Field | Type | Description |
|---|---|---|
| alpha2 | string | null | ISO 639-1 two-letter code |
| alpha3 | string | ISO 639-2 three-letter terminological code |
| name | string | English name of the language |
Example Response
[
{ "alpha2": "ab", "alpha3": "abk", "name": "Abkhazian" },
{ "alpha2": "aa", "alpha3": "aar", "name": "Afar" },
{ "alpha2": "af", "alpha3": "afr", "name": "Afrikaans" },
...
]MAC Address
Validates a MAC address (Media Access Control). Accepts colon-separated (AA:BB:CC:DD:EE:FF), hyphen-separated (AA-BB-CC-DD-EE-FF), dot-grouped (AABB.CCDD.EEFF), and bare (AABBCCDDEEFF) formats. Returns a normalized colon-separated form along with address classification flags.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The MAC address to validate. |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/net/mac?value=00:1A:2B:3C:4D:5E"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the MAC address is valid. |
| normalized | string | Uppercase colon-separated form, e.g. 00:1A:2B:3C:4D:5E. |
| type | string | Address type: unicast, multicast, or broadcast. |
| isLocal | boolean | True if the locally-administered bit is set (LAA). |
| isBroadcast | boolean | True if the address is the broadcast address (FF:FF:FF:FF:FF:FF). |
Example Response — valid
{
"valid": true,
"normalized": "00:1A:2B:3C:4D:5E",
"type": "unicast",
"isLocal": false,
"isBroadcast": false
}Example Response — invalid
{
"valid": false
}KRS (Poland)
Validates Polish National Court Register (Krajowy Rejestr Sądowy) numbers. A KRS number is a unique 10-digit sequential identifier assigned to entities registered in Poland. The input may be provided with or without leading zeros — the response always returns the canonical zero-padded 10-digit form. Optionally fetches live entity data from the official Polish government KRS API.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The KRS number to validate. Accepts 1–10 digits (with or without leading zeros). |
| lookup | boolean | No | When true, performs a live lookup against the official Polish KRS government API and returns entity details. |
| rejestr | string | No | Register type for lookup: P — przedsiębiorców (default), S — stowarzyszeń. |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/pl/krs?value=0000896246&lookup=true"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value is a valid KRS number |
| number | string | Canonical zero-padded 10-digit KRS number |
| krs | object | Live lookup result. Present only when lookup=true. Contains checked, found, name, legalForm, nip, regon, registeredAt, address and more. If the government API is unreachable, returns { "checked": false, "reason": "unavailable" }. |
Example Response
{
"valid": true,
"number": "0000896246",
"krs": {
"checked": true,
"found": true,
"krs": "0000896246",
"rejestr": "P",
"name": "CREACT.DEV SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"legalForm": "SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"nip": "5252859428",
"regon": "38877001300000",
"hasOppStatus": false,
"registeredAt": "21.04.2021",
"dataAsOf": "15.01.2026",
"lastEntryAt": "14.01.2026",
"address": {
"city": "WARSZAWA",
"voivodeship": "MAZOWIECKIE",
"street": "UL. ŚWIĘTOKRZYSKA",
"houseNumber": "30",
"flatNumber": "63",
"postalCode": "00-116",
"country": "POLSKA",
"website": "HTTPS://CREACT.DEV/"
}
}
}PESEL (Poland)
Validates Polish national identification numbers (PESEL). Checks the checksum digit, extracts the birth date and gender encoded in the number.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The 11-digit PESEL number to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/pl/pesel?value=90090515836"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the PESEL number is valid (checksum correct) |
| birthDate | string | Birth date encoded in the PESEL, in ISO 8601 format (YYYY-MM-DD) |
| gender | string | Gender encoded in the PESEL: male or female |
| isOver15 | boolean | Whether the person is at least 15 years old |
| isOver18 | boolean | Whether the person is at least 18 years old |
| isOver21 | boolean | Whether the person is at least 21 years old |
Example Response
{
"valid": true,
"birthDate": "1990-09-05",
"gender": "male",
"isOver15": true,
"isOver18": true,
"isOver21": true
}Phone Number
Validates phone numbers for 200+ countries. Returns the country, calling code, national number, line type, and formatted representations (E.164, national, international). Accepts numbers in E.164 format (+48600123456) or in national format when a countryCode hint is provided.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The phone number to validate |
| countryCode | string | No | ISO 3166-1 alpha-2 country code (e.g. PL, DE, US). Required when the number is in national format without a country prefix. |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/phone?value=%2B48600123456"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the phone number is valid |
| countryCode | string | null | ISO 3166-1 alpha-2 country code (e.g. PL) |
| callingCode | string | International dialling prefix without the + (e.g. 48) |
| nationalNumber | string | The subscriber number without the country calling code |
| type | string | Line type: MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, TOLL_FREE, PREMIUM_RATE, VOIP, SHARED_COST, PERSONAL_NUMBER, PAGER, UAN, VOICEMAIL, UNKNOWN |
| e164 | string | Number in E.164 format (e.g. +48600123456) |
| national | string | Number formatted in national notation (e.g. 600 123 456) |
| international | string | Number formatted in international notation (e.g. +48 600 123 456) |
Example Response — valid
{
"valid": true,
"countryCode": "PL",
"callingCode": "48",
"nationalNumber": "600123456",
"type": "MOBILE",
"e164": "+48600123456",
"national": "600 123 456",
"international": "+48 600 123 456"
}Example Response — valid (US toll-free)
{
"valid": true,
"countryCode": "US",
"callingCode": "1",
"nationalNumber": "8005550100",
"type": "TOLL_FREE",
"e164": "+18005550100",
"national": "(800) 555-0100",
"international": "+1 800-555-0100"
}Example Response — invalid
{
"valid": false
}REGON (Poland)
Validates Polish statistical identification numbers (REGON). Supports both the 9-digit format used by legal entities and the 14-digit format used by local units. Verification is based on the official checksum algorithm.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The 9-digit or 14-digit REGON number to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/pl/regon?value=590096454"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the REGON number is valid (checksum correct) |
| type | string | Format variant: entity (9-digit) or local-unit (14-digit). Only present when valid is true. |
Example Response
{
"valid": true,
"type": "entity"
}Semver
Validates a semantic version string according to the Semver 2.0.0 specification and parses it into its components: major, minor, patch, pre-release identifiers, and build metadata.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The version string to validate, e.g. 1.2.3-alpha.1+build.456 |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/semver?value=1.2.3-alpha.1%2Bbuild.456"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the string is a valid Semver 2.0.0 version |
| major | number | Major version number. Only present when valid is true. |
| minor | number | Minor version number. Only present when valid is true. |
| patch | number | Patch version number. Only present when valid is true. |
| prerelease | string[] | null | Pre-release identifiers split by ., e.g. ["alpha", "1"]. null when absent. Only present when valid is true. |
| build | string[] | null | Build metadata identifiers split by ., e.g. ["build", "456"]. null when absent. Only present when valid is true. |
Example Response
{
"valid": true,
"major": 1,
"minor": 2,
"patch": 3,
"prerelease": ["alpha", "1"],
"build": ["build", "456"]
}URL
Validates and parses a URL, breaking it down into its individual components: protocol, domain, path, and query parameters. Uses the WHATWG URL Standard for parsing. Returns valid: false for any string that cannot be parsed as a URL.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The URL to validate and parse |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/url?value=https://example.com/path?foo=bar"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the value is a valid, parseable URL |
| protocol | string | The URL scheme without the trailing colon, e.g. https. Only present when valid is true. |
| domain | string | The hostname, e.g. example.com. Only present when valid is true. |
| path | string | The path component, e.g. /path/to/page. Defaults to / when no path is present. Only present when valid is true. |
| query | object | Key-value pairs from the query string. Values are strings, or arrays of strings for repeated keys. Empty object when no query string is present. Only present when valid is true. |
| port | string | null | The port number as a string, or null if no explicit port is specified. Only present when valid is true. |
| hash | string | null | The fragment identifier without the leading #, or null if absent. Only present when valid is true. |
Example Response
{
"valid": true,
"protocol": "https",
"domain": "example.com",
"path": "/path",
"query": { "foo": "bar" },
"port": null,
"hash": null
}UUID
Validates Universally Unique Identifiers (UUIDs) as defined by RFC 4122. Checks the standard 8-4-4-4-12 hexadecimal format and, when a version is specified, additionally verifies the version nibble and the RFC 4122 variant bits.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The UUID to validate |
| version | integer | No | Expected UUID version (1–8). When provided, validation also checks the version nibble and RFC 4122 variant bits. |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/uuid?value=550e8400-e29b-41d4-a716-446655440000&version=4"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the UUID is valid |
| version | number | Detected version nibble (0–15). Only present when valid is true. |
Example Response
{
"valid": true,
"version": 4
}VAT Number
Validates VAT identification numbers (VATIN) for EU and selected non-EU countries. Checks format compliance per country-specific rules. The value may include the country prefix (e.g. DE123456789) or consist of the number only (e.g. 123456789). Spaces, hyphens, and dots are stripped automatically.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The VAT number to validate (with or without country prefix) |
| countryCode | string | No | ISO 3166-1 alpha-2 country code (e.g. DE, PL, FR). If omitted, the code is inferred from the first two characters of value. |
| checkVies | boolean | No | When true, queries the EU VIES system to verify the number is actively registered. Only applicable to EU countries. Adds a vies object to the response. |
Supported Countries
| Code | Country | Format (without prefix) |
|---|---|---|
| AL | Albania | letter (J/K/L/M) + 8 digits + letter |
| AR | Argentina | 11 digits (CUIT) |
| AT | Austria | U + 8 digits |
| AU | Australia | 11 digits (ABN) |
| BA | Bosnia and Herzegovina | 12–13 digits |
| BE | Belgium | 10 digits |
| BG | Bulgaria | 9–10 digits |
| BO | Bolivia | 7 digits (NIT) |
| BR | Brazil | 11 digits (CPF) or 14 digits (CNPJ) |
| BY | Belarus | 9 digits |
| BZ | Belize | 6 digits |
| CA | Canada | 9 digits (BN) |
| CH | Switzerland | 6 digits (old) or E + 9 digits + optional suffix |
| CL | Chile | 8 digits + check char (0–9 or K) |
| CN | China | 18 alphanumeric chars (USCI) |
| CO | Colombia | 10 digits (NIT + check) |
| CR | Costa Rica | 9–12 digits |
| CY | Cyprus | 8 digits + 1 letter |
| CZ | Czech Republic | 8–10 digits |
| DE | Germany | 9 digits; or 9 digits + EX (small companies) |
| DK | Denmark | 8 digits |
| DO | Dominican Republic | 9 digits (companies) or 11 digits (individuals) |
| EC | Ecuador | 13 digits (RUC) |
| EE | Estonia | 9 digits |
| EL | Greece | 9 digits |
| ES | Spain | letter/digit + 7 digits + letter/digit |
| FI | Finland | 8 digits |
| FR | France | 2 alphanum chars + 9 digits |
| GB | United Kingdom | 9 or 12 digits; GD000–GD499; HA500–HA999 |
| GT | Guatemala | 8 digits (NIT + check) |
| HN | Honduras | 14 digits (RTN) |
| HR | Croatia | 11 digits |
| HU | Hungary | 8 digits |
| ID | Indonesia | 16 digits (NPWP) |
| IE | Ireland | 7 digits + 1–2 letters |
| IL | Israel | 1–9 digits |
| IN | India | 15 chars (GSTIN) |
| IS | Iceland | 5–6 digits |
| IT | Italy | 11 digits |
| JP | Japan | 13 digits (Corporate Number) |
| KZ | Kazakhstan | 12 digits (BIN/PIN) |
| LT | Lithuania | 9 or 12 digits |
| LU | Luxembourg | 8 digits |
| LV | Latvia | 11 digits |
| MK | North Macedonia | 13 digits |
| MT | Malta | 8 digits |
| MX | Mexico | 12–13 chars (RFC) |
| NG | Nigeria | 12 digits (TIN) |
| NI | Nicaragua | 13 digits + 1 letter (RUC) |
| NL | Netherlands | 9 digits + B + 2 digits |
| NO | Norway | 9 digits + optional MVA |
| NZ | New Zealand | 9 digits (IRD) |
| PA | Panama | variable (RUC) |
| PE | Peru | 11 digits (RUC) |
| PH | Philippines | 12 digits (TIN) |
| PL | Poland | 10 digits |
| PT | Portugal | 9 digits |
| PY | Paraguay | 7–9 digits (RUC) |
| RO | Romania | 2–10 digits |
| RS | Serbia | 9 digits (PIB) |
| RU | Russia | 10 or 12 digits (INN) |
| SA | Saudi Arabia | 15 digits |
| SE | Sweden | 12 digits |
| SI | Slovenia | 8 digits |
| SK | Slovakia | 10 digits |
| SM | San Marino | 5 digits |
| SV | El Salvador | 14 digits (NIT) |
| TR | Turkey | 10 digits (VKN) |
| TW | Taiwan | 8 digits |
| UA | Ukraine | 12 digits |
| UY | Uruguay | 12 digits (RUT) |
| UZ | Uzbekistan | 9 digits (INN) |
| VE | Venezuela | letter (J/G/V/E) + 9 digits (RIF) |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/vat?value=DE123456789&countryCode=DE&checkVies=true"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the VAT number matches the expected format and checksum |
| normalized | string | The VAT number after normalisation (uppercase, spaces/hyphens/dots removed) and country prefix stripped |
| countryCode | string | The 2-letter country code used for validation |
| countryName | string | Full name of the country |
| isEU | boolean | Whether the country is an EU member state (relevant for VIES lookup) |
| vies | object | Only present when checkVies=true. See The vies object below. |
The vies object
When the VIES check was skipped or failed (checked: false):
| Field | Type | Description |
|---|---|---|
| checked | boolean | false |
| reason | string | not_eu — country is not an EU member state; unavailable — VIES API could not be reached |
When the VIES check succeeded (checked: true):
| Field | Type | Description |
|---|---|---|
| checked | boolean | true |
| valid | boolean | Whether the number is actively registered in the VIES database |
| name | string | null | Registered business name as returned by VIES, or null if not available |
| address | string | null | Registered business address as returned by VIES, or null if not available |
Example Response
{
"valid": true,
"countryCode": "DE",
"countryName": "Germany",
"isEU": true,
"vies": {
"checked": true,
"valid": true,
"name": "EXAMPLE GMBH",
"address": "MUSTERSTRASSE 1\n10115 BERLIN"
}
}VIN
Validates a 17-character Vehicle Identification Number (VIN) as defined by ISO 3779. Checks that the VIN contains only permitted characters (letters A–Z excluding I, O, Q, and digits 0–9) and verifies the NHTSA check digit algorithm. When valid, the response includes the parsed WMI, VDS, and VIS sections, the detected production region and country, the manufacturer name (if known), and the possible model year or years. Spaces and hyphens in the input are stripped automatically.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| value | string | Yes | The 17-character VIN to validate |
Example Request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.isvalid.dev/v0/vin?value=1FTFW1ET9DFC10312"Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the VIN passes format validation |
| normalized | string | The VIN after normalisation — uppercase, spaces and hyphens removed |
| wmi | string | World Manufacturer Identifier — first 3 characters |
| vds | string | Vehicle Descriptor Section — characters 4–9 (manufacturer-specific vehicle attributes) |
| vis | string | Vehicle Identification Section — characters 10–17 (model year, plant, serial number) |
| region | string | null | Production region inferred from the first one or two WMI characters. Possible values: North America, South America, Europe, Asia, Africa, Oceania |
| country | string | null | Country of manufacture inferred from the first two WMI characters, or null if not in the built-in directory |
| manufacturer | string | null | Manufacturer name if the WMI is in the built-in directory, or null for unknown WMIs |
| modelYear | number[] | null | Possible model years decoded from position 10. Returns an array of 1 or 2 values because the encoding repeats on a 30-year cycle (e.g. [1983, 2013]). Returns null if the character at position 10 is not a recognised model year code. |
| checkDigit | object | Result of the NHTSA check digit calculation. See the checkDigit object below. |
The checkDigit object
| Field | Type | Description |
|---|---|---|
| value | string | The actual character at position 9 of the VIN |
| calculated | string | The check digit computed by the NHTSA weighted-sum algorithm. A value of X represents 10. |
| valid | boolean | Whether value matches calculated |
| applicable | boolean | Whether the check digit standard applies to this VIN. true for North American (WMI starts with 1–5) and Chinese (WMI starts with H or L) vehicles. For other regions, position 9 is a manufacturer-specific attribute — the algorithm is always computed but the result may not match. |
Example Response — valid (Ford, USA, 2013)
{
"valid": true,
"normalized": "1FTFW1ET9DFC10312",
"wmi": "1FT",
"vds": "FW1ET9",
"vis": "DFC10312",
"region": "North America",
"country": "United States",
"manufacturer": "Ford",
"modelYear": [2013],
"checkDigit": {
"value": "9",
"calculated": "9",
"valid": true,
"applicable": true
}
}Example Response — valid (BMW, Germany)
{
"valid": true,
"normalized": "WBA3A5C51CF256560",
"wmi": "WBA",
"vds": "3A5C51",
"vis": "CF256560",
"region": "Europe",
"country": "Germany",
"manufacturer": "BMW",
"modelYear": [1982, 2012],
"checkDigit": {
"value": "1",
"calculated": "7",
"valid": false,
"applicable": false
}
}Example Response — invalid
{
"valid": false
}