Beta

no.tools API

Use the tools in your own apps, scripts and automations. One JSON request per operation – free and without sign-up.

OpenAPI specification

Quick start

Every operation is a POST request with a JSON body. The response is plain JSON.

curl https://api.no.tools/v1/base64/encode \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello, no.tools!"}'
{ "base64": "SGVsbG8sIG5vLnRvb2xzIQ==" }

Access and limits

  • Without a key: 30 requests per minute per IP address.
  • With an API key: 600 requests per minute. Send it as header Authorization: Bearer YOUR_KEY.
  • Need a key or a higher limit? Write to [email protected].

Keep keys on your server – never put them in public browser code.

Errors

Errors return a status code and a JSON body with error.code and error.message.

400Malformed JSON or parameters that do not match the schema (details lists the fields)
401Invalid or revoked API key
404Unknown endpoint
413Request body larger than 10 MB
422The tool cannot process the input, e.g. invalid Base64
429Rate limit exceeded – see the Retry-After header

Privacy

Your input is processed in memory only and never stored or logged. Rate limiting counts requests per IP address or key for 60 seconds.

Endpoints

Base64 Encode / Decode

Open tool

Encode text as Base64

POSThttps://api.no.tools/v1/base64/encode

Parameters

NameTypeDefault
textrequired
Text to encode (UTF-8)
string
urlSafe = false
Use the URL-safe alphabet (base64url) without padding
booleanfalse

Example request

curl https://api.no.tools/v1/base64/encode \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello, no.tools!"}'

Example response

{
  "base64": "SGVsbG8sIG5vLnRvb2xzIQ=="
}

Decode Base64 to text

POSThttps://api.no.tools/v1/base64/decode

Parameters

NameTypeDefault
base64required
Standard or URL-safe Base64; whitespace and missing padding are allowed
string

Example request

curl https://api.no.tools/v1/base64/decode \
  -H "Content-Type: application/json" \
  -d '{"base64":"SGVsbG8sIG5vLnRvb2xzIQ=="}'

Example response

{
  "text": "Hello, no.tools!"
}

Color Converter & Contrast Checker

Open tool

Convert a color to all formats

POSThttps://api.no.tools/v1/color-converter/convert

Parameters

NameTypeDefault
colorrequired
Any CSS color: #hex, rgb(), hsl(), hwb(), oklch() or a color name
string
scale = false
Also return tints and shades (12 steps, light to dark)
booleanfalse

Example request

curl https://api.no.tools/v1/color-converter/convert \
  -H "Content-Type: application/json" \
  -d '{"color":"rebeccapurple"}'

Example response

{
  "hex": "#663399",
  "rgb": "rgb(102 51 153)",
  "hsl": "hsl(270 50% 40%)",
  "hsv": "hsv(270, 66.7%, 60%)",
  "oklch": "oklch(44.03% 0.1603 303.37)",
  "cmyk": "cmyk(33%, 67%, 0%, 40%)",
  "rgba": {
    "r": 102,
    "g": 51,
    "b": 153,
    "a": 1
  }
}

Check WCAG contrast

POSThttps://api.no.tools/v1/color-converter/contrast

Parameters

NameTypeDefault
foregroundrequired
Text color
string
backgroundrequired
Background color
string

Example request

curl https://api.no.tools/v1/color-converter/contrast \
  -H "Content-Type: application/json" \
  -d '{"foreground":"#2563eb","background":"#ffffff"}'

Example response

{
  "ratio": 5.17,
  "wcag": {
    "aaNormal": true,
    "aaLarge": true,
    "aaaNormal": false,
    "aaaLarge": true,
    "ui": true
  }
}

Compound Interest & Savings Calculator

Open tool

Simulate a savings plan with compound interest

POSThttps://api.no.tools/v1/compound-interest/simulate

Parameters

NameTypeDefault
initial = 0
Starting capital
number 0–10000000000000
monthly = 0
Contribution at the end of each month
number 0–10000000000000
raterequired
Nominal interest rate per year in percent
number -50–100
yearsrequiredinteger 1–100
compounding = "monthly""monthly" | "yearly""monthly"
increase = 0
Yearly increase of the monthly contribution in percent
number 0–1000

Example request

curl https://api.no.tools/v1/compound-interest/simulate \
  -H "Content-Type: application/json" \
  -d '{"initial":1000,"monthly":100,"rate":5,"years":3}'

Example response

{
  "final": 5036.805783336707,
  "totalContributions": 4600,
  "totalInterest": 436.80578333670746,
  "rows": [
    {
      "year": 1,
      "contributions": 1200,
      "interest": 79.04744704332973,
      "balance": 2279.047447043329,
      "totalContributions": 2200,
      "totalInterest": 79.04744704332973
    },
    {
      "year": 2,
      "contributions": 1200,
      "interest": 144.4859419148521,
      "balance": 3623.533388958181,
      "totalContributions": 3400,
      "totalInterest": 223.53338895818183
    },
    {
      "year": 3,
      "contributions": 1200,
      "interest": 213.2723943785256,
      "balance": 5036.805783336707,
      "totalContributions": 4600,
      "totalInterest": 436.80578333670746
    }
  ]
}

Cron Expression Explainer

Open tool

Explain a cron expression and list next runs

POSThttps://api.no.tools/v1/cron-expression/explain

Parameters

NameTypeDefault
expressionrequired
5-field cron expression or a macro like @daily
string
count = 5
Number of upcoming runs
integer 1–505
from
Start time (ISO 8601); default: now
string
locale = "en"
Language of the description
"en" | "de""en"

Example request

curl https://api.no.tools/v1/cron-expression/explain \
  -H "Content-Type: application/json" \
  -d '{"expression":"*/15 9-17 * * 1-5","count":3,"from":"2026-10-15T08:00:00Z"}'

Example response

{
  "expression": "*/15 9-17 * * 1-5",
  "description": "Every 15 minutes, between 09:00 and 17:59, Monday through Friday",
  "nextRuns": [
    "2026-10-15T09:00:00.000Z",
    "2026-10-15T09:15:00.000Z",
    "2026-10-15T09:30:00.000Z"
  ]
}

Currency Converter

Open tool

Convert an amount between currencies

POSThttps://api.no.tools/v1/currency-converter/convert

Parameters

NameTypeDefault
amount = 1number1
fromrequired
Source currency (ISO 4217)
string
torequired
Target currency or list of currencies
string | string[]

Example request

curl https://api.no.tools/v1/currency-converter/convert \
  -H "Content-Type: application/json" \
  -d '{"amount":100,"from":"EUR","to":["USD","CHF"]}'

Example response

{
  "amount": 100,
  "from": "EUR",
  "date": "2026-10-14",
  "results": [
    {
      "currency": "USD",
      "rate": 1.1195,
      "value": 111.95
    },
    {
      "currency": "CHF",
      "rate": 0.933,
      "value": 93.3
    }
  ],
  "source": "European Central Bank reference rates via frankfurter.dev"
}

Get the current reference rates

POSThttps://api.no.tools/v1/currency-converter/rates

Parameters

NameTypeDefault
base
Base currency
string

Example request

curl https://api.no.tools/v1/currency-converter/rates \
  -H "Content-Type: application/json" \
  -d '{"base":"EUR"}'

Example response

{
  "base": "EUR",
  "date": "2026-10-14",
  "rates": {
    "CHF": 0.933,
    "EUR": 1,
    "GBP": 0.84385,
    "USD": 1.1195
  },
  "source": "European Central Bank reference rates via frankfurter.dev"
}

YAML ↔ JSON ↔ CSV Converter

Open tool

Convert between JSON, YAML and CSV

POSThttps://api.no.tools/v1/data-converter/convert

Parameters

NameTypeDefault
inputrequired
Source data as text
string
from = "auto""auto" | "json" | "yaml" | "csv""auto"
torequired"json" | "yaml" | "csv"
indent = 2
Indentation for JSON/YAML
integer 0–82
delimiter = "auto"
CSV delimiter (auto = detect when reading, comma when writing)
"auto" | "comma" | "semicolon" | "tab" | "pipe""auto"
header = true
The first CSV row contains column names
booleantrue

Example request

curl https://api.no.tools/v1/data-converter/convert \
  -H "Content-Type: application/json" \
  -d '{"input":"name;city\nAnna;Berlin\nBen;Hamburg","to":"json"}'

Example response

{
  "output": "[\n  {\n    \"name\": \"Anna\",\n    \"city\": \"Berlin\"\n  },\n  {\n    \"name\": \"Ben\",\n    \"city\": \"Hamburg\"\n  }\n]",
  "from": "csv"
}

Date Calculator

Open tool

Period between two dates

POSThttps://api.no.tools/v1/date-calculator/difference

Parameters

NameTypeDefault
startrequiredstring
endrequiredstring
includeEnd = false
Count the end date as a full day
booleanfalse

Example request

curl https://api.no.tools/v1/date-calculator/difference \
  -H "Content-Type: application/json" \
  -d '{"start":"2026-01-01","end":"2026-12-24"}'

Example response

{
  "days": 357,
  "direction": "forward",
  "weeks": 51,
  "restDays": 0,
  "years": 0,
  "months": 11,
  "monthDays": 23,
  "workdays": 255
}

Add or subtract time from a date

POSThttps://api.no.tools/v1/date-calculator/add

Parameters

NameTypeDefault
daterequiredstring
amountrequired
Negative values subtract
integer -100000–100000
unitrequired"days" | "weeks" | "months" | "years" | "workdays"

Example request

curl https://api.no.tools/v1/date-calculator/add \
  -H "Content-Type: application/json" \
  -d '{"date":"2026-10-15","amount":10,"unit":"workdays"}'

Example response

{
  "date": "2026-10-29",
  "weekday": 4,
  "isoWeek": {
    "year": 2026,
    "week": 44
  }
}

DNS Lookup

Open tool

Query DNS records

POSThttps://api.no.tools/v1/dns-lookup/lookup

Parameters

NameTypeDefault
namerequired
Domain, URL or e-mail address; an IP address triggers a reverse (PTR) lookup
string
types = ["A","AAAA","CNAME","MX","NS","TXT","SOA","CAA"]
Record types to query
("A" | "AAAA" | "CNAME" | "MX" | "NS" | "TXT" | "SOA" | "CAA" | "SRV" | "PTR" | "DS" | "DNSKEY" | "HTTPS")[]["A","AAAA","CNAME","MX","NS","TXT","SOA","CAA"]
resolver = "cloudflare"
DNS-over-HTTPS resolver
"cloudflare" | "google""cloudflare"

Example request

curl https://api.no.tools/v1/dns-lookup/lookup \
  -H "Content-Type: application/json" \
  -d '{"name":"no.tools","types":["A"]}'

Example response

{
  "name": "no.tools",
  "results": [
    {
      "type": "A",
      "status": "NOERROR",
      "authenticated": false,
      "records": [
        {
          "name": "no.tools",
          "type": "A",
          "ttl": 300,
          "data": "172.67.168.128"
        },
        {
          "name": "no.tools",
          "type": "A",
          "ttl": 300,
          "data": "104.21.26.196"
        }
      ]
    }
  ]
}

EXIF Viewer & Metadata Remover

Open tool

Read photo metadata (EXIF, GPS, XMP …)

POSThttps://api.no.tools/v1/exif-viewer/read

Parameters

NameTypeDefault
dataBase64required
Image file (JPEG, PNG or WebP) as Base64
string

Example request

curl https://api.no.tools/v1/exif-viewer/read \
  -H "Content-Type: application/json" \
  -d '{"dataBase64":"/9j/4QEhRXhpZgAATU0AKgAAAAgABAEPAAIAAAAGAAAAyAEQAAIAAAAHAAAAzodpAAQAAAABAAAAUIglAAQAAAABAAAAeAAAAAAA…"}'

Example response

{
  "format": "jpeg",
  "hasMetadata": true,
  "gps": {
    "lat": 53.55,
    "lon": 9.983333333333333
  },
  "tags": [
    {
      "key": "Make",
      "group": "camera",
      "value": "Canon"
    },
    {
      "key": "Model",
      "group": "camera",
      "value": "EOS R6"
    },
    {
      "key": "DateTimeOriginal",
      "group": "capture",
      "value": "2026:07:14 18:30:00"
    },
    {
      "key": "GPSPosition",
      "group": "location",
      "value": "53.550000, 9.983333"
    }
  ],
  "otherTags": 0,
  "thumbnail": false,
  "xmp": false,
  "iptc": false,
  "comments": [],
  "texts": [],
  "other": []
}

Remove all metadata losslessly

POSThttps://api.no.tools/v1/exif-viewer/strip

Parameters

NameTypeDefault
dataBase64required
Image file (JPEG, PNG or WebP) as Base64
string

Example request

curl https://api.no.tools/v1/exif-viewer/strip \
  -H "Content-Type: application/json" \
  -d '{"dataBase64":"/9j/4QEhRXhpZgAATU0AKgAAAAgABAEPAAIAAAAGAAAAyAEQAAIAAAAHAAAAzodpAAQAAAABAAAAUIglAAQAAAABAAAAeAAAAAAA…"}'

Example response

{
  "dataBase64": "/9j/wAARCAACAAIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9…",
  "format": "jpeg",
  "bytesBefore": 909,
  "bytesAfter": 618
}

Hash Generator

Open tool

Hash text or binary data

POSThttps://api.no.tools/v1/hash-generator/hash

Parameters

NameTypeDefault
text
Text to hash (UTF-8). Provide either text or dataBase64.
string
dataBase64
Binary data as Base64, e.g. a file’s content
string
algorithms = ["MD5","SHA-1","SHA-256","SHA-384","SHA-512"]
Algorithms to calculate
("MD5" | "SHA-1" | "SHA-256" | "SHA-384" | "SHA-512")[]["MD5","SHA-1","SHA-256","SHA-384","SHA-512"]
encoding = "hex"
Output encoding of the digests
"hex" | "base64""hex"
uppercase = false
Uppercase hex digits
booleanfalse

Example request

curl https://api.no.tools/v1/hash-generator/hash \
  -H "Content-Type: application/json" \
  -d '{"text":"no.tools","algorithms":["SHA-256","MD5"]}'

Example response

{
  "hashes": {
    "SHA-256": "6e56313bdb9441c7c59f219ee9b94c935c9b218e14e88e0e6028f2767110c436",
    "MD5": "147dd04ae6c853d552407c27e7f88a61"
  }
}

JSON Formatter & Validator

Open tool

Pretty-print JSON

POSThttps://api.no.tools/v1/json-formatter/format

Parameters

NameTypeDefault
jsonrequired
JSON document as text
string
indent = 2
Indentation: 2, 4 or "tab"
2 | 4 | "tab"2
sortKeys = false
Sort object keys alphabetically (recursively)
booleanfalse

Example request

curl https://api.no.tools/v1/json-formatter/format \
  -H "Content-Type: application/json" \
  -d '{"json":"{\"name\":\"no.tools\",\"tools\":31,\"tags\":[\"free\",\"private\"]}","indent":2}'

Example response

{
  "json": "{\n  \"name\": \"no.tools\",\n  \"tools\": 31,\n  \"tags\": [\n    \"free\",\n    \"private\"\n  ]\n}",
  "stats": {
    "type": "object",
    "keys": 3,
    "depth": 2
  }
}

Minify JSON

POSThttps://api.no.tools/v1/json-formatter/minify

Parameters

NameTypeDefault
jsonrequired
JSON document as text
string
sortKeys = false
Sort object keys alphabetically (recursively)
booleanfalse

Example request

curl https://api.no.tools/v1/json-formatter/minify \
  -H "Content-Type: application/json" \
  -d '{"json":"{\n  \"b\": 1,\n  \"a\": [1, 2]\n}","sortKeys":true}'

Example response

{
  "json": "{\"a\":[1,2],\"b\":1}"
}

Validate JSON

POSThttps://api.no.tools/v1/json-formatter/validate

Parameters

NameTypeDefault
jsonrequired
JSON document as text
string

Example request

curl https://api.no.tools/v1/json-formatter/validate \
  -H "Content-Type: application/json" \
  -d '{"json":"{\"a\": 1,}"}'

Example response

{
  "valid": false,
  "error": {
    "message": "Expected double-quoted property name in JSON at position 8 (line 1 column 9)",
    "line": 1,
    "column": 9
  }
}

JWT Decoder

Open tool

Decode a JWT (without verification)

POSThttps://api.no.tools/v1/jwt-decoder/decode

Parameters

NameTypeDefault
tokenrequired
JWT (a leading "Bearer " is ignored)
string

Example request

curl https://api.no.tools/v1/jwt-decoder/decode \
  -H "Content-Type: application/json" \
  -d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE…"}'

Example response

{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022
  },
  "status": null,
  "times": {
    "iat": "2018-01-18T01:30:22.000Z"
  }
}

Verify a JWT signature

POSThttps://api.no.tools/v1/jwt-decoder/verify

Parameters

NameTypeDefault
tokenrequired
JWT (a leading "Bearer " is ignored)
string
keyrequired
HMAC secret, PEM public key, JWK or JWKS (matched by kid)
string
secretEncoding = "utf8"
Encoding of an HMAC secret
"utf8" | "base64""utf8"

Example request

curl https://api.no.tools/v1/jwt-decoder/verify \
  -H "Content-Type: application/json" \
  -d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE…","key":"your-256-bit-secret"}'

Example response

{
  "valid": true,
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022
  },
  "status": null,
  "times": {
    "iat": "2018-01-18T01:30:22.000Z"
  }
}

Lorem Ipsum Generator

Open tool

Generate Lorem Ipsum placeholder text

POSThttps://api.no.tools/v1/lorem-ipsum/generate

Parameters

NameTypeDefault
unit = "paragraphs""paragraphs" | "sentences" | "words""paragraphs"
count = 3
Up to 200 paragraphs/sentences or 5000 words
integer 1–50003
startClassic = true
Start with “Lorem ipsum dolor sit amet …”
booleantrue
html = false
Wrap paragraphs in <p> tags
booleanfalse

Example request

curl https://api.no.tools/v1/lorem-ipsum/generate \
  -H "Content-Type: application/json" \
  -d '{"unit":"sentences","count":2}'

Example response

{
  "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Unde aliqua eos consequat omnis, ad duis cu…"
}

Number Base & Roman Numeral Converter

Open tool

Convert integers between bases 2–36

POSThttps://api.no.tools/v1/number-base-converter/convert

Parameters

NameTypeDefault
valuerequired
Integer as text; sign, separators and 0x/0b/0o prefixes are allowed
string
base = 10
Base of the input
integer 2–3610
to = [2,8,10,16]
Target bases
integer 2–36[][2,8,10,16]
uppercase = falsebooleanfalse

Example request

curl https://api.no.tools/v1/number-base-converter/convert \
  -H "Content-Type: application/json" \
  -d '{"value":"ff","base":16}'

Example response

{
  "results": {
    "2": "11111111",
    "8": "377",
    "10": "255",
    "16": "ff"
  },
  "twosComplement": {
    "8": "ff",
    "16": "00ff",
    "32": "000000ff",
    "64": "00000000000000ff"
  }
}

Convert Roman numerals

POSThttps://api.no.tools/v1/number-base-converter/roman

Parameters

NameTypeDefault
valuerequired
A number (1–3999) or a Roman numeral
integer -9007199254740991–9007199254740991 | string

Example request

curl https://api.no.tools/v1/number-base-converter/roman \
  -H "Content-Type: application/json" \
  -d '{"value":"MCMXCIV"}'

Example response

{
  "number": 1994,
  "roman": "MCMXCIV"
}

Password Generator

Open tool

Generate random passwords

POSThttps://api.no.tools/v1/password-generator/password

Parameters

NameTypeDefault
length = 20
Length (4–128)
integer 4–12820
lowercase = truebooleantrue
uppercase = truebooleantrue
digits = truebooleantrue
symbols = truebooleantrue
excludeAmbiguous = false
Exclude look-alikes (I l 1 O 0 o)
booleanfalse
count = 1
Number of passwords (1–50)
integer 1–501

Example request

curl https://api.no.tools/v1/password-generator/password \
  -H "Content-Type: application/json" \
  -d '{"length":16,"count":2}'

Example response

{
  "passwords": [
    "iJxHYF[>:fu84m%0",
    "&HV8#b/zWz<_-d)Z"
  ],
  "entropyBits": 103.6,
  "strength": "veryStrong",
  "crackSeconds": 774836571258945800000
}

Generate passphrases

POSThttps://api.no.tools/v1/password-generator/passphrase

Parameters

NameTypeDefault
words = 5
Number of words (3–12)
integer 3–125
separator = "-"string"-"
capitalize = falsebooleanfalse
includeNumber = false
Append a digit to one random word
booleanfalse
count = 1
Number of passwords (1–50)
integer 1–501

Example request

curl https://api.no.tools/v1/password-generator/passphrase \
  -H "Content-Type: application/json" \
  -d '{"words":5,"capitalize":true}'

Example response

{
  "passwords": [
    "Milk-Donut-Turtle-Ivory-Satin"
  ],
  "entropyBits": 49.9,
  "strength": "fair",
  "crackSeconds": 51518.1083243887
}

Percentage & VAT Calculator

Open tool

p % of a value

POSThttps://api.no.tools/v1/percent-calculator/of

Parameters

NameTypeDefault
percentrequirednumber
baserequirednumber

Example request

curl https://api.no.tools/v1/percent-calculator/of \
  -H "Content-Type: application/json" \
  -d '{"percent":20,"base":150}'

Example response

{
  "result": 30
}

What percent is part of whole?

POSThttps://api.no.tools/v1/percent-calculator/ratio

Parameters

NameTypeDefault
partrequirednumber
wholerequirednumber

Example request

curl https://api.no.tools/v1/percent-calculator/ratio \
  -H "Content-Type: application/json" \
  -d '{"part":30,"whole":120}'

Example response

{
  "result": 25
}

Find the base value

POSThttps://api.no.tools/v1/percent-calculator/base

Parameters

NameTypeDefault
partrequired
The known part
number
percentrequired
Which percentage the part is
number

Example request

curl https://api.no.tools/v1/percent-calculator/base \
  -H "Content-Type: application/json" \
  -d '{"part":30,"percent":20}'

Example response

{
  "result": 150
}

Percentage change

POSThttps://api.no.tools/v1/percent-calculator/change

Parameters

NameTypeDefault
fromrequirednumber
torequirednumber

Example request

curl https://api.no.tools/v1/percent-calculator/change \
  -H "Content-Type: application/json" \
  -d '{"from":80,"to":100}'

Example response

{
  "result": 25
}

Add or subtract a percentage

POSThttps://api.no.tools/v1/percent-calculator/apply

Parameters

NameTypeDefault
baserequirednumber
percentrequired
Negative for discounts, e.g. -15
number

Example request

curl https://api.no.tools/v1/percent-calculator/apply \
  -H "Content-Type: application/json" \
  -d '{"base":200,"percent":-15}'

Example response

{
  "result": 170
}

Net ↔ gross with VAT

POSThttps://api.no.tools/v1/percent-calculator/vat

Parameters

NameTypeDefault
amountrequirednumber
rate = 19
VAT rate in percent
number 0–10019
direction = "net-to-gross""net-to-gross" | "gross-to-net""net-to-gross"

Example request

curl https://api.no.tools/v1/percent-calculator/vat \
  -H "Content-Type: application/json" \
  -d '{"amount":119,"direction":"gross-to-net"}'

Example response

{
  "net": 100,
  "vat": 19,
  "gross": 119
}

QR Code Generator

Open tool

Create a QR code as SVG

POSThttps://api.no.tools/v1/qr-code-generator/create

Parameters

NameTypeDefault
contentrequired
What the QR code contains: text/link, Wi-Fi credentials, contact (vCard) or e-mail
object
content.typerequired"text" | "wifi" | "contact" | "email"
content.textrequired
only if type = "text" Link or any text
string
content.ssidrequired
only if type = "wifi"
string
content.password = ""
only if type = "wifi"
string""
content.security = "WPA"
only if type = "wifi"
"WPA" | "WEP" | "nopass""WPA"
content.hidden = false
only if type = "wifi"
booleanfalse
content.firstName = ""
only if type = "contact"
string""
content.lastName = ""
only if type = "contact"
string""
content.organization = ""
only if type = "contact"
string""
content.title = ""
only if type = "contact"
string""
content.phone = ""
only if type = "contact"
string""
content.email = ""
only if type = "contact"
string""
content.website = ""
only if type = "contact"
string""
content.torequired
only if type = "email"
string
content.subject = ""
only if type = "email"
string""
content.body = ""
only if type = "email"
string""
errorCorrection = "M"
Error correction level (7 %, 15 %, 25 %, 30 %)
"L" | "M" | "Q" | "H""M"
margin = 2
Quiet zone in modules
integer 0–162
dark = "#000000"
Foreground color
string"#000000"
light = "#ffffff"
Background color
string"#ffffff"

Example request

curl https://api.no.tools/v1/qr-code-generator/create \
  -H "Content-Type: application/json" \
  -d '{"content":{"type":"text","text":"https://no.tools"}}'

Example response

{
  "payload": "https://no.tools",
  "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 29 29\" shape-rendering=\"crispEdges\"><path fill=…"
}

QR code from text or a link

POSThttps://api.no.tools/v1/qr-code-generator/text

Parameters

NameTypeDefault
textrequired
Link or any text
string
errorCorrection = "M"
Error correction level (7 %, 15 %, 25 %, 30 %)
"L" | "M" | "Q" | "H""M"
margin = 2
Quiet zone in modules
integer 0–162
dark = "#000000"
Foreground color
string"#000000"
light = "#ffffff"
Background color
string"#ffffff"

Example request

curl https://api.no.tools/v1/qr-code-generator/text \
  -H "Content-Type: application/json" \
  -d '{"text":"https://no.tools"}'

Example response

{
  "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 29 29\" shape-rendering=\"crispEdges\"><path fill=…"
}

Random Generator

Open tool

Random integers

POSThttps://api.no.tools/v1/random-generator/numbers

Parameters

NameTypeDefault
min = 1integer -9007199254740991–90071992547409911
max = 100integer -9007199254740991–9007199254740991100
count = 1integer 1–100001
unique = false
No duplicates (e.g. lottery numbers)
booleanfalse
sort = falsebooleanfalse

Example request

curl https://api.no.tools/v1/random-generator/numbers \
  -H "Content-Type: application/json" \
  -d '{"min":1,"max":49,"count":6,"unique":true,"sort":true}'

Example response

{
  "numbers": [
    25,
    26,
    36,
    37,
    41,
    49
  ]
}

Roll dice

POSThttps://api.no.tools/v1/random-generator/dice

Parameters

NameTypeDefault
count = 1integer 1–1001
sides = 6integer 2–10006

Example request

curl https://api.no.tools/v1/random-generator/dice \
  -H "Content-Type: application/json" \
  -d '{"count":2,"sides":6}'

Example response

{
  "rolls": [
    2,
    5
  ],
  "sum": 7
}

Flip coins

POSThttps://api.no.tools/v1/random-generator/coins

Parameters

NameTypeDefault
count = 1integer 1–10001

Example request

curl https://api.no.tools/v1/random-generator/coins \
  -H "Content-Type: application/json" \
  -d '{"count":3}'

Example response

{
  "flips": [
    "heads",
    "tails",
    "tails"
  ],
  "heads": 1,
  "tails": 2
}

Draw entries from a list

POSThttps://api.no.tools/v1/random-generator/pick

Parameters

NameTypeDefault
itemsrequired
Entries, e.g. names
string[]
count = 1integer 1–100001

Example request

curl https://api.no.tools/v1/random-generator/pick \
  -H "Content-Type: application/json" \
  -d '{"items":["Anna","Ben","Cara","David"],"count":1}'

Example response

{
  "picked": [
    "David"
  ]
}

Shuffle a list

POSThttps://api.no.tools/v1/random-generator/shuffle

Parameters

NameTypeDefault
itemsrequired
Entries, e.g. names
string[]

Example request

curl https://api.no.tools/v1/random-generator/shuffle \
  -H "Content-Type: application/json" \
  -d '{"items":["Anna","Ben","Cara","David"]}'

Example response

{
  "items": [
    "Anna",
    "Cara",
    "David",
    "Ben"
  ]
}

Split a list into teams

POSThttps://api.no.tools/v1/random-generator/teams

Parameters

NameTypeDefault
itemsrequired
Entries, e.g. names
string[]
teams = 2integer 1–10002

Example request

curl https://api.no.tools/v1/random-generator/teams \
  -H "Content-Type: application/json" \
  -d '{"items":["Anna","Ben","Cara","David","Emil"],"teams":2}'

Example response

{
  "teams": [
    [
      "David",
      "Emil",
      "Ben"
    ],
    [
      "Anna",
      "Cara"
    ]
  ]
}

Regex Tester

Open tool

Run a regular expression (JavaScript)

POSThttps://api.no.tools/v1/regex-tester/test

Parameters

NameTypeDefault
patternrequired
Pattern without surrounding slashes
string
flags = "g"string"g"
textrequiredstring
replacement
Optional replacement ($1, $<name>, $&)
string
limit = 100
Maximum number of matches returned
integer 1–1000100

Example request

curl https://api.no.tools/v1/regex-tester/test \
  -H "Content-Type: application/json" \
  -d '{"pattern":"(?<year>\\d{4})-(\\d{2})","text":"Releases: 2025-10 and 2026-03","replacement":"$2/$<year>"}'

Example response

{
  "matches": [
    {
      "index": 10,
      "end": 17,
      "text": "2025-10",
      "groups": [
        "2025",
        "10"
      ],
      "named": {
        "year": "2025"
      }
    },
    {
      "index": 22,
      "end": 29,
      "text": "2026-03",
      "groups": [
        "2026",
        "03"
      ],
      "named": {
        "year": "2026"
      }
    }
  ],
  "truncated": false,
  "replaced": "Releases: 10/2025 and 03/2026"
}

IP Subnet Calculator

Open tool

Calculate an IPv4 subnet

POSThttps://api.no.tools/v1/subnet-calculator/calculate

Parameters

NameTypeDefault
addressrequired
e.g. "192.168.1.10/24" or "192.168.1.10 255.255.255.0"
string
splitPrefix
Optionally split the network into subnets with this prefix
integer 0–32
limit = 64
Maximum number of subnets returned when splitting
integer 1–25664

Example request

curl https://api.no.tools/v1/subnet-calculator/calculate \
  -H "Content-Type: application/json" \
  -d '{"address":"192.168.1.10/24","splitPrefix":26}'

Example response

{
  "cidr": "192.168.1.0/24",
  "network": "192.168.1.0",
  "broadcast": "192.168.1.255",
  "netmask": "255.255.255.0",
  "wildcard": "0.0.0.255",
  "firstHost": "192.168.1.1",
  "lastHost": "192.168.1.254",
  "total": 256,
  "usable": 254,
  "address": "192.168.1.10",
  "type": "private",
  "class": "C",
  "binary": {
    "address": "11000000.10101000.00000001.00001010",
    "netmask": "11111111.11111111.11111111.00000000"
  },
  "reverseDns": "10.1.168.192.in-addr.arpa",
  "split": {
    "total": 4,
    "subnets": [
      {
        "cidr": "192.168.1.0/26",
        "network": "192.168.1.0",
        "broadcast": "192.168.1.63",
        "netmask": "255.255.255.192",
        "wildcard": "0.0.0.63",
        "firstHost": "192.168.1.1",
        "lastHost": "192.168.1.62",
        "total": 64,
        "usable": 62
      },
      {
        "cidr": "192.168.1.64/26",
        "network": "192.168.1.64",
        "broadcast": "192.168.1.127",
        "netmask": "255.255.255.192",
        "wildcard": "0.0.0.63",
        "firstHost": "192.168.1.65",
        "lastHost": "192.168.1.126",
        "total": 64,
        "usable": 62
      },
      {
        "cidr": "192.168.1.128/26",
        "network": "192.168.1.128",
        "broadcast": "192.168.1.191",
        "netmask": "255.255.255.192",
        "wildcard": "0.0.0.63",
        "firstHost": "192.168.1.129",
        "lastHost": "192.168.1.190",
        "total": 64,
        "usable": 62
      },
      {
        "cidr": "192.168.1.192/26",
        "network": "192.168.1.192",
        "broadcast": "192.168.1.255",
        "netmask": "255.255.255.192",
        "wildcard": "0.0.0.63",
        "firstHost": "192.168.1.193",
        "lastHost": "192.168.1.254",
        "total": 64,
        "usable": 62
      }
    ]
  }
}

Text ↔ Hex / Binary / ASCII

Open tool

Text → bytes (hex, binary, decimal, octal)

POSThttps://api.no.tools/v1/text-converter/encode

Parameters

NameTypeDefault
textrequired
Text, encoded as UTF-8
string
format = "hex""hex" | "binary" | "decimal" | "octal""hex"
separator = " "string" "
uppercase = false
Uppercase hex digits
booleanfalse

Example request

curl https://api.no.tools/v1/text-converter/encode \
  -H "Content-Type: application/json" \
  -d '{"text":"Hallo ä"}'

Example response

{
  "bytes": "48 61 6c 6c 6f 20 c3 a4",
  "count": 8
}

Bytes → text

POSThttps://api.no.tools/v1/text-converter/decode

Parameters

NameTypeDefault
bytesrequired
Byte values separated by spaces, commas or colons (hex/binary may be unseparated)
string
format = "hex""hex" | "binary" | "decimal" | "octal""hex"

Example request

curl https://api.no.tools/v1/text-converter/decode \
  -H "Content-Type: application/json" \
  -d '{"bytes":"48 61 6c 6c 6f 20 c3 a4"}'

Example response

{
  "text": "Hallo ä"
}

Text Compare (Diff)

Open tool

Line-by-line diff (side by side)

POSThttps://api.no.tools/v1/text-diff/lines

Parameters

NameTypeDefault
originalrequiredstring
changedrequiredstring
ignoreCase = falsebooleanfalse
ignoreWhitespace = falsebooleanfalse

Example request

curl https://api.no.tools/v1/text-diff/lines \
  -H "Content-Type: application/json" \
  -d '{"original":"one\ntwo\nthree","changed":"one\n2\nthree\nfour"}'

Example response

{
  "identical": false,
  "added": 2,
  "removed": 1,
  "rows": [
    {
      "type": "same",
      "left": {
        "no": 1,
        "text": "one"
      },
      "right": {
        "no": 1,
        "text": "one"
      }
    },
    {
      "type": "mod",
      "left": {
        "no": 2,
        "text": "two",
        "parts": [
          {
            "type": "del",
            "value": "two"
          }
        ]
      },
      "right": {
        "no": 2,
        "text": "2",
        "parts": [
          {
            "type": "add",
            "value": "2"
          }
        ]
      }
    },
    {
      "type": "same",
      "left": {
        "no": 3,
        "text": "three"
      },
      "right": {
        "no": 3,
        "text": "three"
      }
    },
    {
      "type": "add",
      "right": {
        "no": 4,
        "text": "four"
      }
    }
  ]
}

Inline diff by words or characters

POSThttps://api.no.tools/v1/text-diff/inline

Parameters

NameTypeDefault
originalrequiredstring
changedrequiredstring
ignoreCase = falsebooleanfalse
ignoreWhitespace = falsebooleanfalse
granularity = "words""words" | "chars""words"

Example request

curl https://api.no.tools/v1/text-diff/inline \
  -H "Content-Type: application/json" \
  -d '{"original":"The quick brown fox","changed":"The quick red fox"}'

Example response

{
  "identical": false,
  "parts": [
    {
      "type": "same",
      "value": "The quick "
    },
    {
      "type": "del",
      "value": "brown"
    },
    {
      "type": "add",
      "value": "red"
    },
    {
      "type": "same",
      "value": " fox"
    }
  ]
}

Unix Timestamp Converter

Open tool

Convert a Unix timestamp or date

POSThttps://api.no.tools/v1/timestamp-converter/convert

Parameters

NameTypeDefault
input
Unix timestamp or date string (ISO 8601, RFC 2822); omit for now
number | string
unit = "auto"
Unit of a numeric timestamp
"auto" | "s" | "ms" | "us" | "ns""auto"
timeZone = "UTC"
IANA time zone for the "local" field, e.g. Europe/Berlin
string"UTC"
locale = "en"
Language of the relative time
"en" | "de""en"

Example request

curl https://api.no.tools/v1/timestamp-converter/convert \
  -H "Content-Type: application/json" \
  -d '{"input":1760000000,"timeZone":"Europe/Berlin"}'

Example response

{
  "iso": "2025-10-09T08:53:20.000Z",
  "rfc2822": "Thu, 09 Oct 2025 08:53:20 GMT",
  "local": "2025-10-09 10:53:20",
  "unix": {
    "s": "1760000000",
    "ms": "1760000000000",
    "us": "1760000000000000",
    "ns": "1760000000000000000"
  },
  "detectedUnit": "s",
  "relative": "last year",
  "weekday": "Thursday",
  "isoWeek": {
    "year": 2025,
    "week": 41
  },
  "dayOfYear": 282
}

Unit Converter

Open tool

Convert units

POSThttps://api.no.tools/v1/unit-converter/convert

Parameters

NameTypeDefault
valuerequirednumber
categoryrequired
One of: length, mass, temperature, volume, area, speed, time, data, pressure, energy
"length" | "mass" | "temperature" | "volume" | "area" | "speed" | "time" | "data" | "pressure" | "energy"
fromrequired
Source unit id, e.g. "km" or "c"
string
to
Target unit id. Omit to get every unit of the category.
string

Example request

curl https://api.no.tools/v1/unit-converter/convert \
  -H "Content-Type: application/json" \
  -d '{"value":5,"category":"length","from":"mi","to":"km"}'

Example response

{
  "input": {
    "unit": "mi",
    "symbol": "mi",
    "value": 5
  },
  "results": [
    {
      "unit": "km",
      "symbol": "km",
      "value": 8.04672
    }
  ]
}

URL Encode / Decode

Open tool

Percent-encode text

POSThttps://api.no.tools/v1/url-encoder/encode

Parameters

NameTypeDefault
textrequiredstring
scope = "component"
component: also encodes & = ? / …; full: keeps the URL structure
"component" | "full""component"
spaceAsPlus = false
Encode spaces as + (form encoding)
booleanfalse

Example request

curl https://api.no.tools/v1/url-encoder/encode \
  -H "Content-Type: application/json" \
  -d '{"text":"Grüße & Küsse"}'

Example response

{
  "encoded": "Gr%C3%BC%C3%9Fe%20%26%20K%C3%BCsse"
}

Decode percent-encoding

POSThttps://api.no.tools/v1/url-encoder/decode

Parameters

NameTypeDefault
textrequiredstring
plusAsSpace = false
Treat + as space
booleanfalse

Example request

curl https://api.no.tools/v1/url-encoder/decode \
  -H "Content-Type: application/json" \
  -d '{"text":"Gr%C3%BC%C3%9Fe%20%26%20K%C3%BCsse"}'

Example response

{
  "decoded": "Grüße & Küsse"
}

Split a URL into its parts

POSThttps://api.no.tools/v1/url-encoder/parse

Parameters

NameTypeDefault
urlrequired
Absolute URL including the scheme
string

Example request

curl https://api.no.tools/v1/url-encoder/parse \
  -H "Content-Type: application/json" \
  -d '{"url":"https://no.tools/de/api?ref=docs&lang=de#base64"}'

Example response

{
  "parts": [
    {
      "key": "protocol",
      "value": "https"
    },
    {
      "key": "host",
      "value": "no.tools"
    },
    {
      "key": "path",
      "value": "/de/api"
    },
    {
      "key": "query",
      "value": "ref=docs&lang=de"
    },
    {
      "key": "fragment",
      "value": "base64"
    }
  ],
  "params": [
    {
      "key": "ref",
      "value": "docs"
    },
    {
      "key": "lang",
      "value": "de"
    }
  ]
}

UUID / ULID Generator

Open tool

Generate UUIDs or ULIDs

POSThttps://api.no.tools/v1/uuid-generator/generate

Parameters

NameTypeDefault
type = "v4"
v4 = random, v7 = time-ordered, ulid = time-ordered Crockford Base32
"v4" | "v7" | "ulid""v4"
count = 1
Number of IDs (1–1000)
integer 1–10001
uppercase = falsebooleanfalse
hyphens = true
UUIDs only
booleantrue
braces = false
UUIDs only: wrap in { }
booleanfalse

Example request

curl https://api.no.tools/v1/uuid-generator/generate \
  -H "Content-Type: application/json" \
  -d '{"type":"v7","count":3}'

Example response

{
  "ids": [
    "01a13eb8-5d15-7e9c-8504-1d88e03b4ad2",
    "01a13eb8-5d15-7bdd-9c61-759514152a3a",
    "01a13eb8-5d15-7653-bf79-7071a30863a9"
  ]
}

Inspect a UUID or ULID

POSThttps://api.no.tools/v1/uuid-generator/decode

Parameters

NameTypeDefault
idrequired
UUID (any version, with or without hyphens/braces) or ULID
string

Example request

curl https://api.no.tools/v1/uuid-generator/decode \
  -H "Content-Type: application/json" \
  -d '{"id":"01890a5d-ac96-774b-bcce-b302099a8057"}'

Example response

{
  "kind": "uuid",
  "normalized": "01890a5d-ac96-774b-bcce-b302099a8057",
  "version": 7,
  "variant": "rfc9562",
  "timestamp": "2023-06-30T03:34:18.518Z"
}

Word & Character Counter

Open tool

Count words, characters and more

POSThttps://api.no.tools/v1/word-counter/stats

Parameters

NameTypeDefault
textrequiredstring
topWords = 10
Number of most frequent words (3+ letters)
integer 0–10010

Example request

curl https://api.no.tools/v1/word-counter/stats \
  -H "Content-Type: application/json" \
  -d '{"text":"no.tools counts words. Words, characters and sentences!","topWords":3}'

Example response

{
  "characters": 55,
  "charactersNoSpaces": 49,
  "words": 8,
  "sentences": 3,
  "paragraphs": 1,
  "lines": 1,
  "uniqueWords": 7,
  "avgWordLength": 5.63,
  "readingMinutes": 0.04,
  "speakingMinutes": 0.06,
  "bytes": 55,
  "topWords": [
    {
      "word": "words",
      "count": 2
    },
    {
      "word": "and",
      "count": 1
    },
    {
      "word": "characters",
      "count": 1
    }
  ]
}

Transform text (case, lines, cleanup)

POSThttps://api.no.tools/v1/word-counter/transform

Parameters

NameTypeDefault
textrequiredstring
transformrequired"upper" | "lower" | "title" | "sentence" | "camel" | "pascal" | "snake" | "kebab" | "constant" | "sortAsc" | "sortDesc" | "reverseLines" | "dedupe" | "removeEmpty" | "trimLines" | "collapseSpaces" | "reverse"
locale
Locale for case conversion, e.g. "tr" or "de"
string

Example request

curl https://api.no.tools/v1/word-counter/transform \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello no.tools API","transform":"kebab"}'

Example response

{
  "text": "hello-no-tools-api"
}