API documentation
Digizap exposes 15 measurement endpoints publicly — exactly the ones the tools on this site use themselves. Free, no key, no account. The machine-readable OpenAPI 3.1 specification lives at /openapi.json; import it into Swagger Editor, Postman or your own code.
Common rules
- GET and HEAD only; every answer is JSON.
- No key, no account. Each endpoint does have its own maximum of requests per window per visitor (address) — the exact number stands per endpoint below; beyond that the API answers 429 with a retry-after header.
- Some answers are reused: a full scan stays in the cache for up to 15 minutes, the crawl rules (robots and sitemap) for up to 10, response headers for up to 5 — a repeated question may come back fast.
- Endpoints that reach a target themselves — over HTTP or a mail-port probe — share the quiet on our server: at most four measurements at once, at most two questions per twenty seconds on the same target, and at most fourteen seconds of work per request. The pure resolver endpoints (dns, dns-compare, email, mail security, spf) carry their own, shorter timeouts.
- Targets on private or reserved addresses (localhost, 127.x, 10.x, 192.168.x, …) are refused before anything is measured.
- We send no CORS headers: scripts from another browser domain are blocked by the browser itself. Do the work from your own server, or simply use the tools on this site.
- Errors always come as { ok: false, error }, where possible with a failure object naming the cause (DNS failure, timeout, refused address, …).
- We log API calls without arguments — never a target URL.
- Every measurement departs from our own server.
OpenAPI specification
The specification (0.2.0) lives at /openapi.json and is written in English — OpenAPI's standard language. The page and the API answers are Dutch by default; ?lang=en makes them English.
Endpoints
GET /api
Index: application name, version and the full endpoint list.
Limit: at most 60 requests per 60 seconds per address.
Live example call: /api
GET /api/scan
The full website scan: HTML, response headers, redirect chain, robots and sitemap findings, network measurements (DNS, connect, TLS, TTFB, total) and asset weight.
Limit: at most 8 requests per 60 seconds per address, shared in one bucket with /api/fetch.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
Live example call: /api/scan?url=https://digizap.nl
GET /api/fetch
The legacy entry point to the exact same scan as /api/scan — for your own scripts and old bookmarks. Shares its request budget with /api/scan.
Limit: at most 8 requests per 60 seconds per address, shared in one bucket with /api/scan.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
Live example call: /api/fetch?url=https://digizap.nl
GET /api/meta
Page HTML with a weight ceiling plus what our server found per requested asset: status, content type, bytes and manifest fields.
Limit: at most 8 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
assets | no | Comma-separated asset paths or URLs to measure along with the page. |
Live example call: /api/meta?url=https://digizap.nl&assets=/styles.css,/zap.js
GET /api/redirects
The redirect chain hop by hop, including status and headers per hop; by default also the chains of the bare and www variants alongside.
Limit: at most 8 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
variants | no | variants=0 drops the side variants and measures only the given URL. |
Live example call: /api/redirects?url=https://digizap.nl
GET /api/robots
A host's crawl rules: robots.txt parsed group by group (RFC 9307), its sitemap(s) entry by entry, and the cross-check whether sitemap URLs stand in paths that robots forbids.
Limit: at most 8 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
Live example call: /api/robots?url=https://digizap.nl
GET /api/dns
DNS records of a domain (A, AAAA, NS, MX, TXT, CNAME, SOA, CAA, SRV), reverse lookup on an IP address, plus SPF and DMARC interpretation with a grade.
Limit: at most 20 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
domain | no | Domain to look up — pass domain or ip. |
ip | no | IPv4 or IPv6 address for the reverse lookup. |
types | no | Record types to query separately, comma-separated (A, AAAA, MX, TXT, …). |
Live example call: /api/dns?domain=digizap.nl&types=A,MX,TXT
GET /api/dns-compare
The same domain against four public resolvers, with the differences in answer, TTL and outcome alongside.
Limit: at most 10 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
domain | yes | Domain queried against all four resolvers. |
types | no | Record types to query separately, comma-separated (A, AAAA, MX, TXT, …). |
Live example call: /api/dns-compare?domain=digizap.nl
GET /api/email
What an email address says: structure, mailbox domain, MX presence and how that domain protects its sender (SPF, DMARC).
Limit: at most 15 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
address | yes | The email address; ?email= is accepted as the older spelling. |
Live example call: /api/email?address=naam%40digizap.nl
GET /api/mail-security
A domain's mail defense in one pass: SPF, DKIM selectors, DMARC policy and MX, with findings and a grade.
Limit: at most 8 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
domain | yes | Domain whose mail security is measured. |
selectors | no | Extra DKIM selectors to test along, comma-separated. |
Live example call: /api/mail-security?domain=digizap.nl
GET /api/spf
SPF evaluation of a domain against a sending IP address (with optional HELO): match, refusal or soft fail, including the include chain.
Limit: at most 15 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
domain | yes | Sender domain. |
ip | yes | Sending IP address. |
helo | no | HELO/EHLO of the mail server, included in the evaluation. |
Live example call: /api/spf?domain=digizap.nl&ip=152.53.104.68
GET /api/mail-ports
Which mail ports (25, 465, 587) are open on a domain or mail server, with the greeting each server gives; MX servers are tested first by default.
Limit: at most 6 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
host | yes | Domain or mail server; ?domain= is accepted as the older spelling. |
ports | no | Port numbers to test separately, comma-separated. |
mx | no | mx=0 skips the MX lookup and tests only the given host. |
Live example call: /api/mail-ports?host=mail.digizap.nl
GET /api/headers
The response headers of a URL: status, security headers, cache policy and content length.
Limit: at most 12 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
Live example call: /api/headers?url=https://digizap.nl
GET /api/cert
The certificate of an https target: issuer, validity, domain names (SAN), protocol and key strength, plus which TLS versions the server really accepts — measured version by version. Untrusted and expired certificates are reported as measured.
Limit: at most 12 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | https addresses only; other protocols answer with 400. |
Live example call: /api/cert?url=https://digizap.nl
GET /api/reach
Whether a URL or domain is reachable: status, timing and repeated sample measurements, with separate measurements per address family (IPv4 and IPv6) and a parity verdict.
Limit: at most 8 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
url | yes | Target address; bare domain names are accepted too. |
samples | no | Number of repeated measurements, 1 to 5; default 3. |
Live example call: /api/reach?url=https://digizap.nl
GET /api/ports
Which service ports (22, 53, 80, 443, 3389, …) on a domain or host name are reachable: open, closed or silent, per port with time and what the service itself said first. No grade — the measurement speaks.
Limit: at most 6 requests per 60 seconds per address.
| Parameter | Required | Meaning |
|---|---|---|
host | yes | Domain or host name; ?domain= is accepted as the older spelling. |
ports | no | Port numbers from the fixed list (21, 22, 53, 80, 443, 3389, 8080, 8443), comma-separated; default 22, 80 and 443. Ports off the list are not investigated and reported as portsSkipped. |
Live example call: /api/ports?host=digizap.nl&ports=22,80,443