Skip to content
Y
YAS.SH
Tools API

Tools API Reference

Every utility under /tools documented per-endpoint: parameters, curl examples and response shapes. Machine-readable version: OpenAPI 3.1 · Interactive overview: /docs/api.

Conventions

Endpoint

POST /api/v1/tools/:slug with a JSON body. No authentication required (public utilities).

Limits
  • Rate limit: 60 requests/min per IP429 + Retry-After
  • Input ceiling: 64 KB413 PAYLOAD_TOO_LARGE
  • Errors: RFC 9457 application/problem+json bodies
  • Unknown slug → 404 NOT_FOUND (no echo mock)
# Try it now
curl -X POST https://yas.sh/api/v1/tools/hash-calculator \
-H "Content-Type: application/json" \
-d '{"input":"hello","algo":"sha256"}'

ALL TOOLS AT A GLANCE

ToolCategoryServer APIReference
Base64 Textbase64-textEncodingPOST /api/v1/tools/base64-textcontract ↓
Base64 Filebase64-fileEncodingbrowser-onlywhy ↓
JSON Validatorjson-validatorValidationPOST /api/v1/tools/json-validatorcontract ↓
XML Validatorxml-validatorValidationbrowser-onlywhy ↓
Text Comparisontext-diffTextPOST /api/v1/tools/text-diffcontract ↓
JSON / XML Converterjson-xmlConversionbrowser-onlywhy ↓
CSV Convertercsv-converterConversionbrowser-onlywhy ↓
JSON Formatterjson-formatterFormattingPOST /api/v1/tools/json-formattercontract ↓
URL Encoderurl-encoderFormattingPOST /api/v1/tools/url-encodercontract ↓
Password Generatorpassword-generatorGeneratorsPOST /api/v1/tools/password-generatorcontract ↓
Hash Calculatorhash-calculatorGeneratorsPOST /api/v1/tools/hash-calculatorcontract ↓
UUID Generatoruuid-generatorGeneratorsPOST /api/v1/tools/uuid-generatorcontract ↓
Random Stringrandom-stringGeneratorsPOST /api/v1/tools/random-stringcontract ↓
Unix Timestampunix-timestampGeneratorsPOST /api/v1/tools/unix-timestampcontract ↓
JWT Decoderjwt-decoderWebPOST /api/v1/tools/jwt-decodercontract ↓
Regex Testerregex-testerWebPOST /api/v1/tools/regex-testercontract ↓
HTML Escapehtml-escapeIT OpsPOST /api/v1/tools/html-escapecontract ↓
String Lengthstring-lengthIT OpsPOST /api/v1/tools/string-lengthcontract ↓
Case Convertercase-converterIT OpsPOST /api/v1/tools/case-convertercontract ↓
SQL Formattersql-formatterIT Opsbrowser-onlywhy ↓
Credit Card Validatorcredit-card-validatorIT OpsPOST /api/v1/tools/credit-card-validatorcontract ↓
IP Validatorip-validatorIT OpsPOST /api/v1/tools/ip-validatorcontract ↓
MAC Validatormac-validatorIT OpsPOST /api/v1/tools/mac-validatorcontract ↓
Lorem Ipsumlorem-generatorIT OpsPOST /api/v1/tools/lorem-generatorcontract ↓
Checksum CalculatorchecksumIT OpsPOST /api/v1/tools/checksumcontract ↓
QR Generatorqr-generatorIT OpsPOST /api/v1/tools/qr-generatorcontract ↓
UTM Builderutm-builderMarketingPOST /api/v1/tools/utm-buildercontract ↓
Link Checkerlink-checkerMarketingbrowser-onlywhy ↓
What Is My IPwhat-is-my-ipNetworkPOST /api/v1/tools/what-is-my-ipcontract ↓
My IP (plain)ipNetworkPOST /api/v1/tools/ipcontract ↓
DNS Lookupdns-lookupNetworkPOST /api/v1/tools/dns-lookupcontract ↓
IP Subnet Calculatorip-subnet-calculatorNetworkPOST /api/v1/tools/ip-subnet-calculatorcontract ↓
TLS Analyzertls-analyzerNetworkPOST /api/v1/tools/tls-analyzercontract ↓
DANE / TLSAdane-tlsaNetworkPOST /api/v1/tools/dane-tlsacontract ↓
SPF Inspectorspf-inspectorEmail SecurityPOST /api/v1/tools/spf-inspectorcontract ↓
DMARC Inspectordmarc-inspectorEmail SecurityPOST /api/v1/tools/dmarc-inspectorcontract ↓
DKIM Inspectordkim-inspectorEmail SecurityPOST /api/v1/tools/dkim-inspectorcontract ↓
MX Healthmx-healthEmail SecurityPOST /api/v1/tools/mx-healthcontract ↓
MTA-STS & TLS-RPTmta-sts-tlsrptEmail SecurityPOST /api/v1/tools/mta-sts-tlsrptcontract ↓
URL Parserurl-parserWebPOST /api/v1/tools/url-parsercontract ↓
HTTP Status Codeshttp-status-codesWebPOST /api/v1/tools/http-status-codescontract ↓
Cron Parsercron-parserWebPOST /api/v1/tools/cron-parsercontract ↓
Color Convertercolor-converterConversionPOST /api/v1/tools/color-convertercontract ↓
Number Base Converternumber-base-converterConversionPOST /api/v1/tools/number-base-convertercontract ↓
Markdown → HTMLmarkdown-to-htmlConversionPOST /api/v1/tools/markdown-to-htmlcontract ↓
CSV → JSONcsv-to-jsonConversionPOST /api/v1/tools/csv-to-jsoncontract ↓
Slug Generatorslug-generatorTextPOST /api/v1/tools/slug-generatorcontract ↓
Text Sortertext-sorterTextPOST /api/v1/tools/text-sortercontract ↓
Readability Scorereadability-scoreTextPOST /api/v1/tools/readability-scorecontract ↓
chmod Calculatorchmod-calculatorIT OpsPOST /api/v1/tools/chmod-calculatorcontract ↓
Date Differencedate-differenceIT OpsPOST /api/v1/tools/date-differencecontract ↓
Password Strengthpassword-strengthSecurityPOST /api/v1/tools/password-strengthcontract ↓

SERVER TOOL CONTRACTS

Base64 Text

base64-textPOST /api/v1/tools/base64-text

Encode or decode a UTF-8 string with Base64.

ParameterTypeDefaultDescription
input*stringText to transform (≤ 64 KB)
mode"encode" | "decode""encode"Direction
REQUEST
curl -X POST https://yas.sh/api/v1/tools/base64-text \
  -H "Content-Type: application/json" \
  -d '{"input":"hello world","mode":"encode"}'
RESPONSE (200)
{ "slug": "base64-text", "result": "aGVsbG8gd29ybGQ=", "mode": "encode" }

Hash Calculator

hash-calculatorPOST /api/v1/tools/hash-calculator

Cryptographic digest of a string.

ParameterTypeDefaultDescription
input*stringText to hash (≤ 64 KB)
algostring"sha256"One of md5, sha1, sha256, sha384, sha512
REQUEST
curl -X POST https://yas.sh/api/v1/tools/hash-calculator \
  -H "Content-Type: application/json" \
  -d '{"input":"hello","algo":"md5"}'
RESPONSE (200)
{ "slug": "hash-calculator", "algo": "md5", "result": "5d41402abc4b2a76b9719d911017c592" }

Checksum Calculator

checksumPOST /api/v1/tools/checksum

Identical to hash-calculator (checksum semantics).

ParameterTypeDefaultDescription
input*stringText to checksum (≤ 64 KB)
algostring"sha256"md5 | sha1 | sha256 | sha384 | sha512
REQUEST
curl -X POST https://yas.sh/api/v1/tools/checksum \
  -H "Content-Type: application/json" \
  -d '{"input":"hello","algo":"sha1"}'
RESPONSE (200)
{ "slug": "checksum", "algo": "sha1", "result": "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d" }

UUID Generator

uuid-generatorPOST /api/v1/tools/uuid-generator

Generate 1–50 random UUIDs (v4).

ParameterTypeDefaultDescription
countinteger1How many (1–50)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/uuid-generator \
  -H "Content-Type: application/json" \
  -d '{"count":2}'
RESPONSE (200)
{ "slug": "uuid-generator", "count": 2, "result": ["<uuid>", "<uuid>"] }

URL Encoder

url-encoderPOST /api/v1/tools/url-encoder

Percent-encode / percent-decode a string.

ParameterTypeDefaultDescription
input*stringText or URL fragment
mode"encode" | "decode""encode"Direction
REQUEST
curl -X POST https://yas.sh/api/v1/tools/url-encoder \
  -H "Content-Type: application/json" \
  -d '{"input":"a b&c=d","mode":"encode"}'
RESPONSE (200)
{ "slug": "url-encoder", "result": "a%20b%26c%3Dd", "mode": "encode" }

Case Converter

case-converterPOST /api/v1/tools/case-converter

Convert text between naming conventions.

ParameterTypeDefaultDescription
input*stringSource text
modestring"upper"upper | lower | title | camel | pascal | snake | kebab
REQUEST
curl -X POST https://yas.sh/api/v1/tools/case-converter \
  -H "Content-Type: application/json" \
  -d '{"input":"hello world","mode":"kebab"}'
RESPONSE (200)
{ "slug": "case-converter", "result": "hello-world", "mode": "kebab" }

HTML Escape

html-escapePOST /api/v1/tools/html-escape

Escape or unescape HTML entities (& < > " ').

ParameterTypeDefaultDescription
input*stringHTML or plain text
mode"encode" | "decode""encode"Direction
REQUEST
curl -X POST https://yas.sh/api/v1/tools/html-escape \
  -H "Content-Type: application/json" \
  -d '{"input":"<b>hi</b>","mode":"encode"}'
RESPONSE (200)
{ "slug": "html-escape", "result": "&lt;b&gt;hi&lt;/b&gt;", "mode": "encode" }

String Length

string-lengthPOST /api/v1/tools/string-length

Count characters (code points), bytes, words and lines.

ParameterTypeDefaultDescription
input*stringAny text
REQUEST
curl -X POST https://yas.sh/api/v1/tools/string-length \
  -H "Content-Type: application/json" \
  -d '{"input":"héllo\nworld"}'
RESPONSE (200)
{ "slug": "string-length", "result": { "chars": 11, "bytes": 12, "words": 2, "lines": 2 } }

JSON Validator

json-validatorPOST /api/v1/tools/json-validator

Validate JSON syntax; returns the parser error if invalid.

ParameterTypeDefaultDescription
input*stringJSON text
REQUEST
curl -X POST https://yas.sh/api/v1/tools/json-validator \
  -H "Content-Type: application/json" \
  -d '{"input":"{\"a\":}"}'
RESPONSE (200)
{ "slug": "json-validator", "valid": false, "error": "..." }

JSON Formatter

json-formatterPOST /api/v1/tools/json-formatter

Beautify (2-space indent) or minify JSON.

ParameterTypeDefaultDescription
input*stringJSON text
mode"beautify" | "minify""beautify"Direction
REQUEST
curl -X POST https://yas.sh/api/v1/tools/json-formatter \
  -H "Content-Type: application/json" \
  -d '{"input":"{\"a\":1,\"b\":[2,3]}","mode":"minify"}'
RESPONSE (200)
{ "slug": "json-formatter", "result": "{\"a\":1,\"b\":[2,3]}", "mode": "minify" }

Password Generator

password-generatorPOST /api/v1/tools/password-generator

CSPRNG passwords, 8–128 chars, optional alnum-only sets.

ParameterTypeDefaultDescription
lengthinteger208–128
countinteger11–10 passwords
mode"full" | "alnum""full"Charset (full includes symbols, unambiguous alnum)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/password-generator \
  -H "Content-Type: application/json" \
  -d '{"length":24,"count":1}'
RESPONSE (200)
{ "slug": "password-generator", "length": 24, "result": "<password>" }

Random String

random-stringPOST /api/v1/tools/random-string

Random string from a named charset.

ParameterTypeDefaultDescription
lengthinteger161–256
modestring"alnum"alnum | alpha | numeric | hex
REQUEST
curl -X POST https://yas.sh/api/v1/tools/random-string \
  -H "Content-Type: application/json" \
  -d '{"length":32,"mode":"hex"}'
RESPONSE (200)
{ "slug": "random-string", "length": 32, "charset": "hex", "result": "<hex>" }

Unix Timestamp

unix-timestampPOST /api/v1/tools/unix-timestamp

Convert a unix timestamp (s/ms) ↔ ISO/UTC date.

ParameterTypeDefaultDescription
input*stringe.g. 1754500000, 1754500000000, or an ISO date (blank = now)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/unix-timestamp \
  -H "Content-Type: application/json" \
  -d '{"input":"1754500000"}'
RESPONSE (200)
{ "slug": "unix-timestamp", "result": { "unix": 1754500000, "iso": "2025-08-06T18:26:40.000Z", "utc": "..." } }

JWT Decoder

jwt-decoderPOST /api/v1/tools/jwt-decoder

Decode a JWT header & payload (NO signature verification — explicitly flagged).

ParameterTypeDefaultDescription
input*stringThe 3-segment token
REQUEST
curl -X POST https://yas.sh/api/v1/tools/jwt-decoder \
  -H "Content-Type: application/json" \
  -d '{"input":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.sig"}'
RESPONSE (200)
{ "slug": "jwt-decoder", "result": { "header": {...}, "payload": {...} }, "warning": "Decoded WITHOUT signature verification" }

Regex Tester

regex-testerPOST /api/v1/tools/regex-tester

Test a regex against a string (ReDoS-guarded, max 100 matches).

ParameterTypeDefaultDescription
pattern*string≤ 500 chars; nested-quantifier patterns rejected
text*stringTest string (≤ 10 KB)
flagsstring"g"Subset of d g i m s u v y
REQUEST
curl -X POST https://yas.sh/api/v1/tools/regex-tester \
  -H "Content-Type: application/json" \
  -d '{"pattern":"(\\w+)@(\\w+)","text":"hello there world","flags":"g"}'
RESPONSE (200)
{ "slug": "regex-tester", "count": 2, "truncated": false, "result": [{ "match": "o t", "index": 4 }, ...] }

IP Validator

ip-validatorPOST /api/v1/tools/ip-validator

Validate IPv4 / IPv6 addresses.

ParameterTypeDefaultDescription
input*stringe.g. 192.168.1.1 or ::1
REQUEST
curl -X POST https://yas.sh/api/v1/tools/ip-validator \
  -H "Content-Type: application/json" \
  -d '{"input":"192.168.1.1"}'
RESPONSE (200)
{ "slug": "ip-validator", "result": { "input": "192.168.1.1", "valid": true, "version": 4 } }

MAC Validator

mac-validatorPOST /api/v1/tools/mac-validator

Validate MAC addresses (colon/hyphen/plain forms).

ParameterTypeDefaultDescription
input*stringe.g. 00:1B:44:11:3A:B7
REQUEST
curl -X POST https://yas.sh/api/v1/tools/mac-validator \
  -H "Content-Type: application/json" \
  -d '{"input":"00:1B:44:11:3A:B7"}'
RESPONSE (200)
{ "slug": "mac-validator", "result": { "input": "00:1B:44:11:3A:B7", "valid": true } }

Credit Card Validator

credit-card-validatorPOST /api/v1/tools/credit-card-validator

Luhn checksum + scheme detection (NOT an existence check).

ParameterTypeDefaultDescription
input*stringDigits; spaces/dashes tolerated
REQUEST
curl -X POST https://yas.sh/api/v1/tools/credit-card-validator \
  -H "Content-Type: application/json" \
  -d '{"input":"4242 4242 4242 4242"}'
RESPONSE (200)
{ "slug": "credit-card-validator", "result": { "valid": true, "scheme": "visa", "note": "Luhn checksum only" } }

Lorem Ipsum

lorem-generatorPOST /api/v1/tools/lorem-generator

1–10 paragraphs of lorem ipsum.

ParameterTypeDefaultDescription
countinteger3Paragraphs (1–10)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/lorem-generator \
  -H "Content-Type: application/json" \
  -d '{"count":1}'
RESPONSE (200)
{ "slug": "lorem-generator", "paragraphs": 1, "result": "Lorem ipsum ..." }

QR Generator

qr-generatorPOST /api/v1/tools/qr-generator

Render a QR code for an http/https URL as a PNG data-URL.

ParameterTypeDefaultDescription
input*stringhttp/https URL (≤ 2048 chars)
sizeinteger512128–1024 px
REQUEST
curl -X POST https://yas.sh/api/v1/tools/qr-generator \
  -H "Content-Type: application/json" \
  -d '{"input":"https://yas.sh","size":256}'
RESPONSE (200)
{ "slug": "qr-generator", "result": "data:image/png;base64,..." }

UTM Builder

utm-builderPOST /api/v1/tools/utm-builder

Append UTM parameters to a base URL.

ParameterTypeDefaultDescription
input*stringBase http/https URL
params.utm_sourcestring≤ 200 chars
params.utm_mediumstring≤ 200 chars
params.utm_campaignstring≤ 200 chars
params.utm_termstring≤ 200 chars
params.utm_contentstring≤ 200 chars
REQUEST
curl -X POST https://yas.sh/api/v1/tools/utm-builder \
  -H "Content-Type: application/json" \
  -d '{"input":"https://yas.sh/pricing","params":{"utm_source":"newsletter","utm_medium":"email","utm_campaign":"launch"}}'
RESPONSE (200)
{ "slug": "utm-builder", "result": "https://yas.sh/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=launch" }

Text Comparison

text-diffPOST /api/v1/tools/text-diff

Line-based diff (LCS) between two texts (≤ 2,000 lines each).

ParameterTypeDefaultDescription
a*stringLeft text (≤ 50 KB)
b*stringRight text (≤ 50 KB)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/text-diff \
  -H "Content-Type: application/json" \
  -d '{"a":"one\ntwo","b":"one\nthree"}'
RESPONSE (200)
{ "slug": "text-diff", "added": 1, "removed": 1, "unchanged": 1, "result": [{ "op": " ", "line": "one" }, ...] }

My IP (plain)

ipPOST /api/v1/tools/ip

Your public IP address and nothing else — also available as plain text via GET.

ParameterTypeDefaultDescription
ipstringOptional specific IP to look up (defaults to your own).
REQUEST
curl -X POST https://yas.sh/api/v1/tools/ip \
  -H "Content-Type: application/json" \
  -d '{}'
RESPONSE (200)
{ "slug": "ip", "result": "8.8.8.8" }  // GET returns bare text: 8.8.8.8

What Is My IP

what-is-my-ipPOST /api/v1/tools/what-is-my-ip

Your public IP with ASN, ISP, geo and VPN/Tor hints (ipinfo-style). No key needed.

ParameterTypeDefaultDescription
ipstringOptional specific IP to look up (defaults to your own via X-Real-IP / X-Forwarded-For). Also supported as ?ip= on GET.
REQUEST
curl -X POST https://yas.sh/api/v1/tools/what-is-my-ip \
  -H "Content-Type: application/json" \
  -d '{}'
RESPONSE (200)
{ "result": { "ip": "1.2.3.4", "ipv4": "1.2.3.4", "asn": "AS13335", "asName": "Cloudflare", "org": "Cloudflare", "city": "Lisbon", "region": "Lisbon", "country": "PT", "loc": "38.7167,-9.1333", "timezone": "Europe/Lisbon", "isVpn": null, "isTor": null } }

DNS Lookup

dns-lookupPOST /api/v1/tools/dns-lookup

Resolve A, AAAA, MX, TXT, NS, CNAME, SOA records for a domain (TTLs included).

ParameterTypeDefaultDescription
input*stringDomain, e.g. example.com (no scheme, no IP literals)
typestring"all"all | A | AAAA | MX | TXT | NS | CNAME | SOA
REQUEST
curl -X POST https://yas.sh/api/v1/tools/dns-lookup \
  -H "Content-Type: application/json" \
  -d '{"input":"yas.sh"}'
RESPONSE (200)
{ "result": { "domain": "yas.sh", "A": [{ "address": "93.184.216.34", "ttl": 300 }], "MX": [{ "priority": 10, "exchange": "mx1.example.com" }], ... } }

IP Subnet Calculator

ip-subnet-calculatorPOST /api/v1/tools/ip-subnet-calculator

IPv4 CIDR math: network, broadcast, netmask, usable hosts.

ParameterTypeDefaultDescription
input*stringCIDR, e.g. 192.168.1.0/24
REQUEST
curl -X POST https://yas.sh/api/v1/tools/ip-subnet-calculator \
  -H "Content-Type: application/json" \
  -d '{"input":"192.168.1.0/24"}'
RESPONSE (200)
{ "result": { "valid": true, "network": "192.168.1.0", "broadcast": "192.168.1.255", "mask": "255.255.255.0", "hosts": 254, "prefix": 24 } }

TLS Analyzer

tls-analyzerPOST /api/v1/tools/tls-analyzer

Full TLS audit of a host: cert chain, expiry, SANs, protocol, cipher, OCSP stapling + HSTS header.

ParameterTypeDefaultDescription
input*stringHostname, e.g. yas.sh (port via :443 form allowed)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/tls-analyzer \
  -H "Content-Type: application/json" \
  -d '{"input":"yas.sh"}'
RESPONSE (200)
{ "result": { "authorized": true, "expiresInDays": 89, "sans": [...], "hsts": { "present": true, "maxAge": 63072000, "includeSubDomains": true, "preload": true }, ... } }

DANE / TLSA

dane-tlsaPOST /api/v1/tools/dane-tlsa

Validate DANE TLSA records (_port._tcp.domain) against the live TLS certificate.

ParameterTypeDefaultDescription
input*stringHostname, e.g. example.com
portinteger443Service port (default 443)
protostring"tcp"tcp | udp
REQUEST
curl -X POST https://yas.sh/api/v1/tools/dane-tlsa \
  -H "Content-Type: application/json" \
  -d '{"input":"example.com","port":443,"proto":"tcp"}'
RESPONSE (200)
{ "result": { "records": [{ "raw": "3 1 1 abc...", "usage": 3, "selector": 1, "matchingType": 1, "match": true }], "cert": { "subject": "...", "expiresInDays": 120 } } }

SPF Inspector

spf-inspectorPOST /api/v1/tools/spf-inspector

Parse SPF (v=spf1): mechanisms, DNS-lookup count vs the 10 limit, ~all/-all, flattened IP count.

ParameterTypeDefaultDescription
input*stringDomain, e.g. example.com
REQUEST
curl -X POST https://yas.sh/api/v1/tools/spf-inspector \
  -H "Content-Type: application/json" \
  -d '{"input":"example.com"}'
RESPONSE (200)
{ "result": { "record": "v=spf1 ip4:1.2.3.4 include:_spf.example.com ~all", "lookupCount": 2, "lookupLimit": 10, "hasAll": true, "allValue": "~all", "permError": false, "flattenedIps": 6, "tree": [...] } }

DMARC Inspector

dmarc-inspectorPOST /api/v1/tools/dmarc-inspector

Fetch and validate _dmarc.<domain> TXT: policy badge, alignment, pct, rua/ruf.

ParameterTypeDefaultDescription
input*stringDomain, e.g. example.com
REQUEST
curl -X POST https://yas.sh/api/v1/tools/dmarc-inspector \
  -H "Content-Type: application/json" \
  -d '{"input":"example.com"}'
RESPONSE (200)
{ "result": { "found": true, "record": "v=DMARC1; p=reject; rua=mailto:dmarc@example.com", "policy": "reject", "subdomainPolicy": null, "pct": 100, "adkim": "r", "aspf": "r", "rua": ["dmarc@example.com"], "valid": true, "issues": [] } }

DKIM Inspector

dkim-inspectorPOST /api/v1/tools/dkim-inspector

Validate <selector>._domainkey.<domain> TXT: v=DKIM1, k=rsa, key length, t= flags.

ParameterTypeDefaultDescription
input*stringDomain, e.g. example.com
selectorstring"selector1"DKIM selector
REQUEST
curl -X POST https://yas.sh/api/v1/tools/dkim-inspector \
  -H "Content-Type: application/json" \
  -d '{"input":"example.com","selector":"selector1"}'
RESPONSE (200)
{ "result": { "found": true, "record": "v=DKIM1; k=rsa; p=MIIB...", "keyLength": 2048, "flags": [], "valid": true } }

MX Health

mx-healthPOST /api/v1/tools/mx-health

MX audit: priorities, A/AAAA resolution, STARTTLS-era port-25 probe, null MX (RFC 7505), duplicates.

ParameterTypeDefaultDescription
input*stringDomain, e.g. example.com
REQUEST
curl -X POST https://yas.sh/api/v1/tools/mx-health \
  -H "Content-Type: application/json" \
  -d '{"input":"example.com"}'
RESPONSE (200)
{ "result": { "nullMx": false, "hosts": [{ "preference": 10, "exchange": "mx1.example.com", "ips": ["93.184.216.34"], "port25": { "open": true } }], "duplicatePriorities": [], "issues": [] } }

MTA-STS & TLS-RPT

mta-sts-tlsrptPOST /api/v1/tools/mta-sts-tlsrpt

MTA-STS (mta-sts TXT + /.well-known/mta-sts.txt) and TLS-RPT (_smtp._tls TXT) validation.

ParameterTypeDefaultDescription
input*stringDomain, e.g. example.com
REQUEST
curl -X POST https://yas.sh/api/v1/tools/mta-sts-tlsrpt \
  -H "Content-Type: application/json" \
  -d '{"input":"example.com"}'
RESPONSE (200)
{ "result": { "stsTxt": { "found": true, "id": "20260808", "valid": true }, "policy": { "found": true, "mode": "enforce", "maxAge": 86400, "mx": ["mx1.example.com"] }, "tlsrpt": { "found": true, "rua": ["tlsrpt@example.com"] }, "issues": [] } }

URL Parser

url-parserPOST /api/v1/tools/url-parser

Split any URL into protocol, auth, host, port, path, query (parsed), hash + origin.

ParameterTypeDefaultDescription
input*stringAny URL
REQUEST
curl -X POST https://yas.sh/api/v1/tools/url-parser \
  -H "Content-Type: application/json" \
  -d '{"input":"https://user:pass@example.com:8443/a/b?q=1#frag"}'
RESPONSE (200)
{ "result": { "protocol": "https:", "host": "example.com:8443", "hostname": "example.com", "port": "8443", "pathname": "/a/b", "query": { "q": "1" }, "hash": "#frag", "origin": "https://example.com:8443" } }

HTTP Status Codes

http-status-codesPOST /api/v1/tools/http-status-codes

Look up HTTP status codes by number or by searching names/classes.

ParameterTypeDefaultDescription
input*stringe.g. 404, or text like "gone" / "2xx"
REQUEST
curl -X POST https://yas.sh/api/v1/tools/http-status-codes \
  -H "Content-Type: application/json" \
  -d '{"input":"404"}'
RESPONSE (200)
{ "result": { "match": { "code": 404, "name": "Not Found", "class": "4xx Client Error", "meaning": "...", "useWhen": "..." } } }

Cron Parser

cron-parserPOST /api/v1/tools/cron-parser

Parse a 5/6-field cron expression and compute the next 5 run times (UTC).

ParameterTypeDefaultDescription
input*stringCron expression, e.g. */15 * * * *
countinteger51–10 next runs
REQUEST
curl -X POST https://yas.sh/api/v1/tools/cron-parser \
  -H "Content-Type: application/json" \
  -d '{"input":"*/15 * * * *"}'
RESPONSE (200)
{ "result": { "valid": true, "expression": "*/15 * * * *", "next": ["2026-08-08T12:15:00.000Z", ...] } }

Color Converter

color-converterPOST /api/v1/tools/color-converter

Convert a color to HEX / RGB / HSL / CMYK / HSV + WCAG contrast ratios.

ParameterTypeDefaultDescription
input*string#hex, rgb(), hsl(), or basic color name
REQUEST
curl -X POST https://yas.sh/api/v1/tools/color-converter \
  -H "Content-Type: application/json" \
  -d '{"input":"#6366f1"}'
RESPONSE (200)
{ "result": { "hex": "#6366f1", "rgb": "rgb(99, 102, 241)", "hsl": "hsl(239, 84%, 67%)", "contrastWhite": 4.87, "bestText": "white" } }

Number Base Converter

number-base-converterPOST /api/v1/tools/number-base-converter

Convert numbers between bases 2–36 (BigInt, arbitrary precision).

ParameterTypeDefaultDescription
input*stringValue in the source base
frominteger10Source base (2–36)
tointeger16Target base (2–36)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/number-base-converter \
  -H "Content-Type: application/json" \
  -d '{"input":"255","from":10,"to":16}'
RESPONSE (200)
{ "result": { "input": "255", "from": 10, "to": 16, "value": "ff" } }

Markdown → HTML

markdown-to-htmlPOST /api/v1/tools/markdown-to-html

Render Markdown to sanitized HTML (marked + sanitize-html allow-list, XSS-safe).

ParameterTypeDefaultDescription
input*stringMarkdown (≤ 64 KB)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/markdown-to-html \
  -H "Content-Type: application/json" \
  -d '{"input":"# Hello\n\n**bold**"}'
RESPONSE (200)
{ "result": "<h1>Hello</h1>\n<p><strong>bold</strong></p>" }

CSV → JSON

csv-to-jsonPOST /api/v1/tools/csv-to-json

Parse CSV (quoted fields, headers) into a JSON array.

ParameterTypeDefaultDescription
input*stringCSV text (≤ 64 KB, ≤ 5,000 rows)
delimiterstring","Field delimiter
hasHeaderbooleantrueFirst row = keys
REQUEST
curl -X POST https://yas.sh/api/v1/tools/csv-to-json \
  -H "Content-Type: application/json" \
  -d '{"input":"name,age\nAnna,30\nBob,25"}'
RESPONSE (200)
{ "result": { "rows": [{ "name": "Anna", "age": "30" }], "count": 2, "columns": ["name", "age"] } }

Slug Generator

slug-generatorPOST /api/v1/tools/slug-generator

Turn any text into a URL-safe slug (transliterates Latin accents).

ParameterTypeDefaultDescription
input*stringSource text
separatorstring"-"Word separator
maxLengthinteger80Output cap
REQUEST
curl -X POST https://yas.sh/api/v1/tools/slug-generator \
  -H "Content-Type: application/json" \
  -d '{"input":"Hello, World! 2026"}'
RESPONSE (200)
{ "result": "hello-world-2026" }

Text Sorter

text-sorterPOST /api/v1/tools/text-sorter

Sort lines ascending / descending / natural, dedupe, or shuffle (CSPRNG).

ParameterTypeDefaultDescription
input*stringMulti-line text
modestring"asc"asc | desc | natural | unique | shuffle
REQUEST
curl -X POST https://yas.sh/api/v1/tools/text-sorter \
  -H "Content-Type: application/json" \
  -d '{"input":"b\na\nc","mode":"asc"}'
RESPONSE (200)
{ "result": "a\nb\nc" }

Readability Score

readability-scorePOST /api/v1/tools/readability-score

Flesch Reading Ease + Flesch-Kincaid grade level + sentence/word stats.

ParameterTypeDefaultDescription
input*stringAny English text
REQUEST
curl -X POST https://yas.sh/api/v1/tools/readability-score \
  -H "Content-Type: application/json" \
  -d '{"input":"The quick brown fox jumps over the lazy dog."}'
RESPONSE (200)
{ "result": { "sentences": 1, "words": 9, "syllables": 11, "fleschReadingEase": 70.2, "gradeLevel": 6.2 } }

chmod Calculator

chmod-calculatorPOST /api/v1/tools/chmod-calculator

Convert between numeric (755) and symbolic (u=rwx,go=rx) permission modes, incl. special bits.

ParameterTypeDefaultDescription
input*stringe.g. 755, 4755, u=rwx,go=rx, or a+rwx
REQUEST
curl -X POST https://yas.sh/api/v1/tools/chmod-calculator \
  -H "Content-Type: application/json" \
  -d '{"input":"755"}'
RESPONSE (200)
{ "result": { "input": "755", "numeric": "755", "symbolic": "u=rwx,go=rx", "special": "none", "bits": { "owner": "rwx", "group": "r-x", "other": "r-x" } } }

Date Difference

date-differencePOST /api/v1/tools/date-difference

Difference between two dates: years/months/days/hours/minutes/seconds + business days.

ParameterTypeDefaultDescription
a*stringDate 1 (ISO or unix seconds)
b*stringDate 2 (ISO or unix seconds)
REQUEST
curl -X POST https://yas.sh/api/v1/tools/date-difference \
  -H "Content-Type: application/json" \
  -d '{"a":"2026-01-01","b":"2026-08-08"}'
RESPONSE (200)
{ "result": { "milliseconds": ..., "days": 219, "weeks": 31, "businessDays": 156, "yearsApprox": 0.6 } }

Password Strength

password-strengthPOST /api/v1/tools/password-strength

Entropy estimate, crack-time (fast hash & bcrypt), and actionable feedback (zxcvbn-flavored).

ParameterTypeDefaultDescription
input*stringPassword to evaluate
REQUEST
curl -X POST https://yas.sh/api/v1/tools/password-strength \
  -H "Content-Type: application/json" \
  -d '{"input":"Tr0ub4dor&3"}'
RESPONSE (200)
{ "result": { "score": 3, "length": 11, "entropyBits": 58.4, "crackFast": "4 days", "crackBcrypt": "102k years", "feedback": ["..."] } }

BROWSER-ONLY TOOLS

These tools are intentionally not available via the server API — their canonical implementation runs in the browser at /tools/:slug. The API returns{ clientOnly: true, reason } for them:

  • base64-file
    Requires the browser File API.
  • xml-validator
    Browser DOMParser, by design (no server XML parser bundled).
  • json-xml
    Complex conversion runs client-side in the tool page.
  • csv-converter
    Runs client-side — potentially sensitive data never uploaded.
  • sql-formatter
    Runs client-side — SQL text must not leave your browser.
  • link-checker
    Server-side would need outbound fetches to arbitrary URLs (SSRF risk).
🍪 Cookies & privacy. yas.sh uses only essential cookies to keep you signed in and remember your preferences. We do not run third-party trackers. See our cookie policy and privacy policy.
Settings