Back to Home

API Documentation

Complete reference for the IsValid Data Validation REST API.

Overview

The IsValid API is a REST API that returns JSON responses. All endpoints are available at the base URL:

https://api.isvalid.dev

All 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_KEY

Keep 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.

PlanAPI KeysCalls / dayPrice
Free1100$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 CodeMeaningDescription
200 OKSuccessThe request succeeded. Check the valid field in the response body.
400 Bad RequestInvalid inputMissing or malformed required parameters.
401 UnauthorizedAuthentication failedAPI key is missing, invalid, or expired.
404 Not FoundUnknown endpointThe requested endpoint does not exist.
422 Unprocessable EntityValidation schema errorThe request body or parameters did not match the expected schema.
429 Too Many RequestsRate limit exceededYou have exceeded your plan's daily request quota.
500 Internal Server ErrorServer errorAn unexpected error occurred on our end. Retry after a moment.

Error Response Body

{
  "error": "Missing required query parameter: value"
}

ABA Routing Number

GET/v0/aba

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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the routing number passes the ABA check digit algorithm
routingNumberstringThe normalized 9-digit routing number (spaces and hyphens removed)
federalReservePrefixstringFirst two digits — the Federal Reserve routing symbol
federalReserveDistrictstringName of the Federal Reserve district (e.g. Denver, San Francisco). Omitted when the prefix is not a known district code.
abaInstitutionIdentifierstringDigits 3–8 — the ABA institution identifier assigned to the bank
checkDigitnumberThe 9th digit used as the check digit

Example Response

{
  "valid": true,
  "routingNumber": "102101645",
  "federalReservePrefix": "10",
  "federalReserveDistrict": "Kansas City",
  "abaInstitutionIdentifier": "210164",
  "checkDigit": 5
}

BIC / SWIFT

GET/v0/bic

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

ParameterTypeRequiredDescription
valuestringYesThe BIC/SWIFT code to validate

Example Request

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.isvalid.dev/v0/bic?value=DEUTDEDB"

Response Fields

FieldTypeDescription
validbooleanWhether the BIC/SWIFT code is valid
bankCodestring4-character institution code
countryCodestringISO 3166-1 alpha-2 country code
countryNamestring | nullFull English name of the country, or null if the country code is not recognised
locationCodestring2-character location code
branchCodestring | null3-character branch code; XXX denotes the primary office. null for 8-character BICs
bankNamestring | nullName 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

GET/v0/btc-address

Validates whether a string is a valid Bitcoin mainnet address. When valid, the response includes the detected address type.

Query Parameters

ParameterTypeRequiredDescription
valuestringYesThe Bitcoin address to validate

Example Request

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.isvalid.dev/v0/btc-address?value=1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf"]

Response Fields

FieldTypeDescription
validbooleanWhether the value is a valid Bitcoin mainnet address
typestringAddress 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

GET/v0/boolean

Parses and validates boolean-like string values. Accepts common boolean representations including true, false, yes, no, 1, 0, on, off.

Query Parameters

ParameterTypeRequiredDescription
valuestringYesThe value to parse as boolean

Example Request

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.isvalid.dev/v0/boolean?value=yes"

Response Fields

FieldTypeDescription
validbooleanWhether the value was recognized as a boolean
normalizedbooleanThe parsed boolean value (true or false)

Example Response

{
  "valid": true,
  "normalized": true
}

Color

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the value is a recognised CSS color string
formatstringDetected input format: hex, rgb, or hsl. Only present when valid is true.
r / g / bnumberRed, green, blue components (0–255). Only present when valid is true.
hnumberHue (0–360). Only present when valid is true.
snumberSaturation (0–100). Only present when valid is true.
lnumberLightness (0–100). Only present when valid is true.
alphanumberOpacity (0–1). Defaults to 1 when no alpha channel is specified. Only present when valid is true.
hexstringNormalised 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the code is a recognised ISO 3166-1 country code
valuestringThe normalised (uppercased) input value
formatstringDetected input format: alpha-2, alpha-3, or numeric
alpha2stringISO 3166-1 alpha-2 code (e.g. PL)
alpha3stringISO 3166-1 alpha-3 code (e.g. POL)
numericstringISO 3166-1 numeric code, zero-padded to 3 digits (e.g. 616)
namestringFull English country name (e.g. Poland)

Example Response

{
  "valid": true,
  "value": "PL",
  "format": "alpha-2",
  "alpha2": "PL",
  "alpha3": "POL",
  "numeric": "616",
  "name": "Poland"
}
GET/v0/country/list

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.

FieldTypeDescription
alpha2stringISO 3166-1 alpha-2 code
alpha3stringISO 3166-1 alpha-3 code
numericstringISO 3166-1 numeric code, zero-padded to 3 digits
namestringFull 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

POST/v0/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

FieldTypeDescription
validbooleanWhether the card number is valid
networkstringDetected card network (e.g. Visa, Mastercard, Amex)
lengthnumberNumber of digits in the card number
luhnbooleanWhether the number passes the Luhn checksum

Example Response

{
  "valid": true,
  "network": "Visa",
  "length": 16,
  "luhn": true
}

Currency Code

GET/v0/currency

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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the value is a recognised ISO 4217 currency code
formatstringDetected input format: alpha or numeric
codestringISO 4217 three-letter alphabetic code (e.g. PLN)
numericCodestringISO 4217 three-digit numeric code, zero-padded (e.g. 985)
namestringOfficial English currency name (e.g. Polish Złoty)
minorUnitnumber | nullNumber 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
}
GET/v0/currency/list

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

FieldTypeDescription
codestringISO 4217 three-letter alphabetic code
numericCodestringISO 4217 three-digit numeric code, zero-padded
namestringOfficial English currency name
minorUnitnumber | nullNumber 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe date string to validate
formatstringNoExpected 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

FieldTypeDescription
validbooleanWhether the date string is valid
isostringThe parsed date in ISO 8601 format (YYYY-MM-DD)

Example Response

{
  "valid": true,
  "iso": "2026-02-19"
}

EAN Barcode

GET/v0/ean

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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the barcode passed checksum validation
formatstringDetected barcode format: EAN-13 or EAN-8. Present only when valid is true
prefixstringGS1 company prefix (2–3 digits). Present only for valid EAN-13 codes
prefixCountrystringCountry 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
}

Email

GET/v0/email

Validates email addresses. Checks RFC 5322 format compliance, domain structure, and optionally verifies that the domain has valid MX records.

Query Parameters

ParameterTypeRequiredDescription
valuestringYesThe email address to validate
checkMxbooleanNoCheck 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

FieldTypeDescription
validbooleanWhether the email address is valid
localstringLocal part of the address (before @)
domainstringDomain part of the address (after @)
mxValidbooleanWhether the domain has valid MX records. Only present when checkMx=true

Example Response

{
  "valid": true,
  "local": "user",
  "domain": "example.com",
  "mxValid": true
}

IBAN

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesFull IBAN (e.g. PL61 1090 1014…) or just the numeric part without the country code prefix when countryCode is provided
countryCodestringNoISO 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

FieldTypeDescription
validbooleanWhether the IBAN passed all validation checks
countryCodestringISO 3166-1 alpha-2 country code (e.g. PL)
countryNamestringFull country name (e.g. Poland)
bbanstringBasic Bank Account Number — the country-specific part after the 4-character IBAN header
isEUbooleanWhether the issuing country is an EU member state
formattedstringIBAN 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the IMEI passed Luhn checksum validation
tacstringType Allocation Code — first 8 digits identifying the device model and manufacturer
snrstringSerial Number — 6 digits uniquely identifying the device within its TAC
checkDigitstringThe 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

GET/v0/net/ip

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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the IP address is valid.
versionnumberIP version: 4 or 6.
typestringAddress classification. IPv4: public, private, loopback, link-local, multicast, broadcast. IPv6: global-unicast, loopback, link-local, unique-local, multicast.
expandedstringFull 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the ISBN passed check digit validation
formatstringDetected format: ISBN-10 or ISBN-13
isbn10string | nullNormalized ISBN-10 (without hyphens). null when the input is ISBN-13 with prefix 979, which has no ISBN-10 equivalent
isbn13stringNormalized 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the ISSN passed check digit validation
issnstringNormalized 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the token has a valid JWT structure (three parts, parseable JSON header and payload, alg field present in header)
algorithmstringThe signing algorithm declared in the header, e.g. HS256, RS256. Only present when valid is true.
headerobjectThe decoded JWT header object. Only present when valid is true.
payloadobjectThe decoded JWT payload object. Only present when valid is true.
issuedAtstring | nullISO 8601 timestamp derived from the iat claim, or null if absent. Only present when valid is true.
expiresAtstring | nullISO 8601 timestamp derived from the exp claim, or null if absent. Only present when valid is true.
expiredboolean | nullWhether 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

GET/v0/language

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

ParameterTypeRequiredDescription
valuestringYesISO 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

FieldTypeDescription
validbooleanWhether the value is a recognised ISO 639 language code
formatstringDetected input format: alpha-2 or alpha-3
alpha2string | nullISO 639-1 two-letter code
alpha3stringISO 639-2 three-letter terminological code
namestringEnglish name of the language

Example Response

{
  "valid": true,
  "format": "alpha-2",
  "alpha2": "pl",
  "alpha3": "pol",
  "name": "Polish"
}

Example Response — invalid

{
  "valid": false
}
GET/v0/language/list

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

FieldTypeDescription
alpha2string | nullISO 639-1 two-letter code
alpha3stringISO 639-2 three-letter terminological code
namestringEnglish 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

GET/v0/net/mac

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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the MAC address is valid.
normalizedstringUppercase colon-separated form, e.g. 00:1A:2B:3C:4D:5E.
typestringAddress type: unicast, multicast, or broadcast.
isLocalbooleanTrue if the locally-administered bit is set (LAA).
isBroadcastbooleanTrue 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)

GET/v0/pl/krs

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

ParameterTypeRequiredDescription
valuestringYesThe KRS number to validate. Accepts 1–10 digits (with or without leading zeros).
lookupbooleanNoWhen true, performs a live lookup against the official Polish KRS government API and returns entity details.
rejestrstringNoRegister 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

FieldTypeDescription
validbooleanWhether the value is a valid KRS number
numberstringCanonical zero-padded 10-digit KRS number
krsobjectLive 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)

GET/v0/pl/pesel

Validates Polish national identification numbers (PESEL). Checks the checksum digit, extracts the birth date and gender encoded in the number.

Query Parameters

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the PESEL number is valid (checksum correct)
birthDatestringBirth date encoded in the PESEL, in ISO 8601 format (YYYY-MM-DD)
genderstringGender encoded in the PESEL: male or female
isOver15booleanWhether the person is at least 15 years old
isOver18booleanWhether the person is at least 18 years old
isOver21booleanWhether 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

GET/v0/phone

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

ParameterTypeRequiredDescription
valuestringYesThe phone number to validate
countryCodestringNoISO 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

FieldTypeDescription
validbooleanWhether the phone number is valid
countryCodestring | nullISO 3166-1 alpha-2 country code (e.g. PL)
callingCodestringInternational dialling prefix without the + (e.g. 48)
nationalNumberstringThe subscriber number without the country calling code
typestringLine type: MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, TOLL_FREE, PREMIUM_RATE, VOIP, SHARED_COST, PERSONAL_NUMBER, PAGER, UAN, VOICEMAIL, UNKNOWN
e164stringNumber in E.164 format (e.g. +48600123456)
nationalstringNumber formatted in national notation (e.g. 600 123 456)
internationalstringNumber 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)

GET/v0/pl/regon

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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the REGON number is valid (checksum correct)
typestringFormat variant: entity (9-digit) or local-unit (14-digit). Only present when valid is true.

Example Response

{
  "valid": true,
  "type": "entity"
}

Semver

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the string is a valid Semver 2.0.0 version
majornumberMajor version number. Only present when valid is true.
minornumberMinor version number. Only present when valid is true.
patchnumberPatch version number. Only present when valid is true.
prereleasestring[] | nullPre-release identifiers split by ., e.g. ["alpha", "1"]. null when absent. Only present when valid is true.
buildstring[] | nullBuild 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 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

FieldTypeDescription
validbooleanWhether the value is a valid, parseable URL
protocolstringThe URL scheme without the trailing colon, e.g. https. Only present when valid is true.
domainstringThe hostname, e.g. example.com. Only present when valid is true.
pathstringThe path component, e.g. /path/to/page. Defaults to / when no path is present. Only present when valid is true.
queryobjectKey-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.
portstring | nullThe port number as a string, or null if no explicit port is specified. Only present when valid is true.
hashstring | nullThe 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe UUID to validate
versionintegerNoExpected 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

FieldTypeDescription
validbooleanWhether the UUID is valid
versionnumberDetected version nibble (0–15). Only present when valid is true.

Example Response

{
  "valid": true,
  "version": 4
}

VAT Number

GET/v0/vat

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

ParameterTypeRequiredDescription
valuestringYesThe VAT number to validate (with or without country prefix)
countryCodestringNoISO 3166-1 alpha-2 country code (e.g. DE, PL, FR). If omitted, the code is inferred from the first two characters of value.
checkViesbooleanNoWhen 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

CodeCountryFormat (without prefix)
ALAlbanialetter (J/K/L/M) + 8 digits + letter
ARArgentina11 digits (CUIT)
ATAustriaU + 8 digits
AUAustralia11 digits (ABN)
BABosnia and Herzegovina12–13 digits
BEBelgium10 digits
BGBulgaria9–10 digits
BOBolivia7 digits (NIT)
BRBrazil11 digits (CPF) or 14 digits (CNPJ)
BYBelarus9 digits
BZBelize6 digits
CACanada9 digits (BN)
CHSwitzerland6 digits (old) or E + 9 digits + optional suffix
CLChile8 digits + check char (0–9 or K)
CNChina18 alphanumeric chars (USCI)
COColombia10 digits (NIT + check)
CRCosta Rica9–12 digits
CYCyprus8 digits + 1 letter
CZCzech Republic8–10 digits
DEGermany9 digits; or 9 digits + EX (small companies)
DKDenmark8 digits
DODominican Republic9 digits (companies) or 11 digits (individuals)
ECEcuador13 digits (RUC)
EEEstonia9 digits
ELGreece9 digits
ESSpainletter/digit + 7 digits + letter/digit
FIFinland8 digits
FRFrance2 alphanum chars + 9 digits
GBUnited Kingdom9 or 12 digits; GD000–GD499; HA500–HA999
GTGuatemala8 digits (NIT + check)
HNHonduras14 digits (RTN)
HRCroatia11 digits
HUHungary8 digits
IDIndonesia16 digits (NPWP)
IEIreland7 digits + 1–2 letters
ILIsrael1–9 digits
INIndia15 chars (GSTIN)
ISIceland5–6 digits
ITItaly11 digits
JPJapan13 digits (Corporate Number)
KZKazakhstan12 digits (BIN/PIN)
LTLithuania9 or 12 digits
LULuxembourg8 digits
LVLatvia11 digits
MKNorth Macedonia13 digits
MTMalta8 digits
MXMexico12–13 chars (RFC)
NGNigeria12 digits (TIN)
NINicaragua13 digits + 1 letter (RUC)
NLNetherlands9 digits + B + 2 digits
NONorway9 digits + optional MVA
NZNew Zealand9 digits (IRD)
PAPanamavariable (RUC)
PEPeru11 digits (RUC)
PHPhilippines12 digits (TIN)
PLPoland10 digits
PTPortugal9 digits
PYParaguay7–9 digits (RUC)
RORomania2–10 digits
RSSerbia9 digits (PIB)
RURussia10 or 12 digits (INN)
SASaudi Arabia15 digits
SESweden12 digits
SISlovenia8 digits
SKSlovakia10 digits
SMSan Marino5 digits
SVEl Salvador14 digits (NIT)
TRTurkey10 digits (VKN)
TWTaiwan8 digits
UAUkraine12 digits
UYUruguay12 digits (RUT)
UZUzbekistan9 digits (INN)
VEVenezuelaletter (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

FieldTypeDescription
validbooleanWhether the VAT number matches the expected format and checksum
normalizedstringThe VAT number after normalisation (uppercase, spaces/hyphens/dots removed) and country prefix stripped
countryCodestringThe 2-letter country code used for validation
countryNamestringFull name of the country
isEUbooleanWhether the country is an EU member state (relevant for VIES lookup)
viesobjectOnly present when checkVies=true. See The vies object below.

The vies object

When the VIES check was skipped or failed (checked: false):

FieldTypeDescription
checkedbooleanfalse
reasonstringnot_eu — country is not an EU member state; unavailable — VIES API could not be reached

When the VIES check succeeded (checked: true):

FieldTypeDescription
checkedbooleantrue
validbooleanWhether the number is actively registered in the VIES database
namestring | nullRegistered business name as returned by VIES, or null if not available
addressstring | nullRegistered 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

GET/v0/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

ParameterTypeRequiredDescription
valuestringYesThe 17-character VIN to validate

Example Request

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.isvalid.dev/v0/vin?value=1FTFW1ET9DFC10312"

Response Fields

FieldTypeDescription
validbooleanWhether the VIN passes format validation
normalizedstringThe VIN after normalisation — uppercase, spaces and hyphens removed
wmistringWorld Manufacturer Identifier — first 3 characters
vdsstringVehicle Descriptor Section — characters 4–9 (manufacturer-specific vehicle attributes)
visstringVehicle Identification Section — characters 10–17 (model year, plant, serial number)
regionstring | nullProduction region inferred from the first one or two WMI characters. Possible values: North America, South America, Europe, Asia, Africa, Oceania
countrystring | nullCountry of manufacture inferred from the first two WMI characters, or null if not in the built-in directory
manufacturerstring | nullManufacturer name if the WMI is in the built-in directory, or null for unknown WMIs
modelYearnumber[] | nullPossible 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.
checkDigitobjectResult of the NHTSA check digit calculation. See the checkDigit object below.

The checkDigit object

FieldTypeDescription
valuestringThe actual character at position 9 of the VIN
calculatedstringThe check digit computed by the NHTSA weighted-sum algorithm. A value of X represents 10.
validbooleanWhether value matches calculated
applicablebooleanWhether 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
}