Backend utilities. Ready to call.
Small, focused APIs for URL checks, DNS lookups, and redirect tracing - things you shouldn't have to build yourself.
GET /api/url-resolve?url=http://example.com
Returns the full redirect chain - not just the final status.
No auth. No setup. Just send a request.
Why this exists
- You need to follow redirects - but don't want to write follow-redirect logic and handle edge cases.
- You need DNS records - but don't want to shell out to
digor wire up a resolver library. - You need reachability checks - but don't want to handle timeouts, TLS errors, and private IP blocking yourself.
- TinyUtils handles the edge cases. Call an endpoint, get JSON back.
Endpoints
Check URL reachability
Returns status code, final URL after redirects, and response time.
Useful for health checks, link validation, and uptime monitoring.
GET /api/url-check
Look up DNS records
Returns A, AAAA, CNAME, MX, TXT, and NS records for any hostname.
Useful for debugging email delivery, CDN configs, and DNS propagation.
GET /api/dns-lookup
Trace redirect chains
Shows every redirect hop and the final destination URL.
Useful for debugging tracking links, scrapers, and link validation.
GET /api/url-resolve
Extract Open Graph metadata
Returns title, description, canonical URL, Open Graph tags, and Twitter card tags.
Useful for SEO audits, social preview checks, and metadata extraction pipelines.
GET /api/open-graph
Inspect HTTP headers
Returns all response headers for a URL, including the final URL after redirects.
Useful for debugging caching, content-type, CORS, and CDN behaviour.
GET /api/http-headers
Inspect TLS certificates
Returns certificate subject, issuer, expiry dates, days remaining, and SANs.
Useful for monitoring certificate expiry, validating SANs, and debugging TLS issues.
GET /api/ssl-check
Parse robots.txt
Returns crawler rules, sitemap references, and user-agent groups as clean JSON.
Useful for inspecting crawl rules, finding sitemaps, and validating robots.txt in CI.
GET /api/robots-parse
Inspect sitemaps
Fetches sitemap XML and returns sitemap index entries or URL entries as structured JSON.
Useful for validating sitemap output, extracting URL lists, and debugging sitemap hosting.
GET /api/sitemap-inspect
IP Lookup
Resolve a domain or IP and return IP and network details including ASN, country, provider, and reverse DNS.
Useful for finding the IP behind a domain, inspecting network ownership, and debugging DNS vs IP routing.
GET /api/ip-lookup
Security Headers
Check common HTTP security headers for any URL. Returns a per-header analysis and a score out of six.
Useful for auditing missing security headers, validating posture after deployments, and CI checks.
GET /api/security-headers
Try it instantly
No signup. No API key. Results in under a second.
GET /api/url-check
{
"reachable": true,
"status": 200,
"final_url": "https://vercel.com/",
"response_time_ms": 123,
"error": null
}No authentication required. Free to use, rate-limited per IP.
Simple by design
- No authentication required - just call the endpoint.
- Plain JSON responses with clear field names.
- Documented error codes so you can handle failures cleanly.
- Free usage is rate-limited per IP.
Docs
Full reference for every endpoint - parameters, responses, and error codes.
GET /api/url-check
Check if a URL is reachable, follow redirects, and measure response time. Returns reachability even for 4xx/5xx responses - only network failures count as unreachable.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/url-check?url=https://vercel.com"
Example Response
{
"reachable": true,
"status": 200,
"final_url": "https://vercel.com/",
"response_time_ms": 312,
"error": null
}Batch Endpoint
POST /api/url-check/batch - check up to 10 URLs in a single request.
curl -X POST "https://tinyutils.dev/api/url-check/batch" \
-H "Content-Type: application/json" \
-d '{"urls":["https://example.com","https://openai.com"]}'Error codes
GET /api/dns-lookup
Resolve DNS records for a hostname. Returns A, AAAA, CNAME, MX, TXT, and NS records. Optionally filter to a single record type. Results are cached for 60 seconds. Rate-limited via the same global pool as url-check.
Query Parameters
Example Requests
# All record types curl "https://tinyutils.dev/api/dns-lookup?domain=example.com" # Single record type curl "https://tinyutils.dev/api/dns-lookup?domain=example.com&type=MX"
Example Response (all types)
{
"ok": true,
"hostname": "example.com",
"normalizedHostname": "example.com",
"records": {
"A": ["93.184.216.34"],
"AAAA": ["2606:2800:21f:cb07:6820:80da:af6b:8b2c"],
"CNAME": [],
"MX": [],
"TXT": ["v=spf1 -all"],
"NS": ["a.iana-servers.net", "b.iana-servers.net"]
},
"meta": {
"lookupTimeMs": 42,
"cached": false,
"rateLimitedScope": "global"
}
}Example Response (type filter)
{
"ok": true,
"hostname": "example.com",
"normalizedHostname": "example.com",
"type": "MX",
"records": {
"MX": [{ "exchange": "mail.example.com", "priority": 10 }]
},
"meta": {
"lookupTimeMs": 18,
"cached": false,
"rateLimitedScope": "global"
}
}Batch Endpoint
POST /api/dns-lookup/batch - look up to 10 domains in a single request.
curl -X POST "https://tinyutils.dev/api/dns-lookup/batch" \
-H "Content-Type: application/json" \
-d '{"domains":["example.com","openai.com"]}'Error codes
GET /api/url-resolve
Trace the full redirect chain of a URL. Returns every hop in order, the final resolved URL, the number of redirects followed, and any error that stopped resolution. Successful resolutions, redirect loops, and missing-location errors are cached for 60 seconds; transient failures (timeouts, request errors) and blocked-host results are not cached. Rate-limited via the same global pool as url-check and dns-lookup.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/url-resolve?url=http://example.com"
Example Response
{
"input_url": "http://example.com",
"final_url": "https://www.example.com/",
"redirect_count": 2,
"redirect_chain": [
{ "url": "http://example.com", "status": 301 },
{ "url": "https://example.com", "status": 301 },
{ "url": "https://www.example.com/", "status": 200 }
],
"error": null
}Batch Endpoint
POST /api/url-resolve/batch - resolve up to 10 URLs in a single request.
curl -X POST "https://tinyutils.dev/api/url-resolve/batch" \
-H "Content-Type: application/json" \
-d '{"urls":["http://example.com","http://openai.com"]}'Error codes
GET /api/http-headers
Inspect HTTP response headers for any URL. Follows redirects and returns the final URL, HTTP status code, and all response headers as a flat key/value map. Results are cached for 60 seconds. Rate-limited via the same global pool as url-check, dns-lookup, and url-resolve.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/http-headers?url=https://example.com"
Example Response
{
"ok": true,
"input_url": "https://example.com",
"final_url": "https://www.example.com/",
"status": 200,
"headers": {
"content-type": "text/html; charset=UTF-8",
"cache-control": "max-age=604800",
"server": "ECAcc (dcb/7F84)"
},
"headers_truncated": false,
"meta": {
"responseTimeMs": 123,
"cached": false,
"rateLimitedScope": "global"
},
"error": null
}Error codes
GET /api/ssl-check
Inspect the TLS certificate for any hostname. Opens a TLS connection to port 443 and returns certificate details including subject, issuer, validity dates, days remaining, and SANs. Results are cached for 60 seconds. Rate-limited via the same global pool as url-check, dns-lookup, url-resolve, and http-headers.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/ssl-check?hostname=example.com"
Example Response
{
"ok": true,
"hostname": "example.com",
"normalizedHostname": "example.com",
"certificate": {
"valid": true,
"subject": "CN=example.com",
"issuer": "DigiCert Inc",
"valid_from": "2026-01-01T00:00:00.000Z",
"valid_to": "2026-12-31T23:59:59.000Z",
"days_remaining": 271,
"sans": ["example.com", "www.example.com"]
},
"meta": {
"lookupTimeMs": 84,
"cached": false,
"rateLimitedScope": "global"
},
"error": null
}Error codes
GET /api/robots-parse
Fetch and parse robots.txt for any site. Accepts a full URL or domain, resolves robots.txt from the site origin, and returns crawler rules, sitemap references, and user-agent groups as clean JSON. Results are cached for 60 seconds. Rate-limited via the same global pool as url-check, dns-lookup, url-resolve, http-headers, and ssl-check.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/robots-parse?url=https://example.com"
Example Response
{
"ok": true,
"input_url": "https://example.com",
"robots_url": "https://example.com/robots.txt",
"found": true,
"status": 200,
"content_type": "text/plain",
"sitemaps": ["https://example.com/sitemap.xml"],
"groups": [
{
"user_agents": ["*"],
"allow": ["/public/"],
"disallow": ["/admin/"],
"crawl_delay": null,
"host": null
}
],
"meta": {
"responseTimeMs": 74,
"cached": false,
"rateLimitedScope": "global"
},
"error": null
}Error codes
GET /api/sitemap-inspect
Fetch and inspect a sitemap or sitemap index. Accepts a full sitemap URL or a site URL (auto-resolved to /sitemap.xml), follows redirects safely, and returns parsed sitemap data as JSON. Successful results are cached for 60 seconds, and some deterministic errors may also be cached. Rate-limited via the same global pool as other public TinyUtils endpoints.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/sitemap-inspect?url=https://example.com"
Example Response
{
"ok": true,
"input_url": "https://example.com",
"sitemap_url": "https://example.com/sitemap.xml",
"final_url": "https://example.com/sitemap.xml",
"status": 200,
"content_type": "application/xml",
"format": "urlset",
"sitemaps": [],
"urls": [
{
"loc": "https://example.com/",
"lastmod": "2026-01-05",
"changefreq": "daily",
"priority": "1.0"
}
],
"xml_truncated": false,
"entries_truncated": false,
"meta": {
"responseTimeMs": 76,
"cached": false,
"rateLimitedScope": "global"
},
"error": null
}Error codes
GET /api/security-headers
Check common HTTP security headers for any URL. Follows redirects and returns a subset of security-relevant response headers plus a per-header analysis with a score out of six. Results are cached for 60 seconds. Rate-limited via the same global pool as other public TinyUtils endpoints.
Query Parameters
Example Request
curl "https://tinyutils.dev/api/security-headers?url=https://example.com"
Example Response
{
"ok": true,
"input_url": "https://example.com",
"final_url": "https://www.example.com/",
"status": 200,
"headers": {
"strict-transport-security": "max-age=63072000",
"x-frame-options": "SAMEORIGIN"
},
"analysis": {
"strict_transport_security": { "present": true, "valid": true },
"content_security_policy": { "present": false, "valid": false },
"x_frame_options": { "present": true, "valid": true },
"x_content_type_options": { "present": false, "valid": false },
"referrer_policy": { "present": false, "valid": false },
"permissions_policy": { "present": false, "valid": false }
},
"score": 2,
"max_score": 6,
"meta": {
"responseTimeMs": 96,
"cached": false,
"rateLimitedScope": "global"
},
"error": null
}Error codes