{"openapi":"3.1.0","info":{"title":"Domain Atlas API","version":"1.0.0","description":"Normalized domain intelligence endpoints for Domain Atlas console and customer API usage.\n\n## Quickstart\n\nSign in and [create an API key](https://domainatlas.com/api-keys) in the console; the key is shown once.\n\n```sh\ncurl \\\n  \"https://domainatlas.com/api/v1/domains/logo.com/overview\" \\\n  -H \"Authorization: Bearer <domain-atlas-api-key>\" \\\n  -H \"Accept: application/json\"\n```\n\nA full profile (/overview) costs 10 credits, charged once per domain every 30 minutes; a request that bypasses the cache (freshness=live) is a new lookup and is charged every time. Every other metered request costs 1. Free includes 100 credits a month, Pro 10,000. Requests are limited to 60 a minute on Free and 500 on Pro; a 429 carries Retry-After.\n\n## Contract\n\n**Authentication** — `Authorization: Bearer <domain-atlas-api-key>`. Data endpoints accept either a signed-in session cookie or a Domain Atlas API key. Key-management endpoints require an interactive session.\n\n**Rate limits** — `429 + Retry-After`. Customer data API requests are limited by actor and endpoint family. Clients should back off using Retry-After, or retry_after_seconds when it is present in the JSON body.\n\n**Key management** — `Plan-based allowance`. GET /api/v1/api-keys returns the current activeKeyLimit. Usage is aggregated by day for 400 days, with the top 5 endpoint families shown per key.\n\n**Methods** — `405 + Allow`. Known API paths return method_not_allowed with an Allow header when called with an unsupported HTTP method.\n\n**Response headers** — `requestId + timing + cache`. Responses include x-request-id, Server-Timing, and x-domain-atlas-duration-ms. Data-backed endpoints also expose cache state, cache TTL when available, and data resolution status.\n\n**Conditional reads** — `HEAD + ETag`. Data-backed reads accept HEAD for cache/status probes. Public documents and OpenAPI support conditional revalidation with ETag or Last-Modified. Protected metadata endpoints expose ETag and HEAD.\n\n**Errors** — `code + message + requestId`. Error responses use stable JSON codes, public-safe messages, request identifiers mirrored from x-request-id, and retry hints when applicable. Every error body is an [ApiError](https://domainatlas.com/docs#schemas/ApiError).\n\n**Domains** — `PSL-normalized`. Domain path params are normalized to the registrable domain. Invalid domains return 422 invalid_domain before any internal lookup, with a stable reason; a public suffix such as co.uk or gov.uk is not a registrable domain (reason public_suffix) and is never charged.\n\n**Identity parser** — `_meta.parser`. Every successful per-domain response names the parser that computed its domain's identity: _meta.parser is { name, version, psl }, the library, its exact release, and the SHA-256 of the public suffix list it bundles.\n\n**Provenance** — `sourceCoverage + cache`. Profile responses keep track of source coverage, cache state, and capabilities still required from the domain data service.","termsOfService":"https://domainatlas.com/terms","contact":{"name":"Domain Atlas","url":"https://domainatlas.com/contact","email":"support@domainatlas.com"}},"x-domain-atlas-limits":{"activeCustomerApiKeys":20,"apiKeyUsageRetentionDays":400,"apiKeyUsageEndpointLimit":5},"servers":[{"url":"https://domainatlas.com","description":"Current Domain Atlas deployment"}],"externalDocs":{"description":"Interactive API reference","url":"https://domainatlas.com/docs"},"tags":[{"name":"Domain profile","description":"Single-domain intelligence endpoints for rank, traffic, keywords, registration, DNS, subdomains, discovery, marks, technology, and per-domain coverage."},{"name":"Research","description":"Portfolio-scale research endpoints for sortable domain inventory, TLD directory data, and schema discovery."},{"name":"Top lists","description":"Sortable Atlas Traffic and AtlasRank lists for top, new, rising, falling, and exited domains."},{"name":"Discovery","description":"Atlas discovery feeds for marks, newly issued certificate candidates, and newly registered domains."},{"name":"Customer API","description":"Session-only customer API key lifecycle endpoints for creating, listing, revoking, and reviewing usage."},{"name":"Research state","description":"Saved-domain and recent-search console workflows, plus the public opaque-token action that disables every watchlist email update for an account."},{"name":"Source coverage","description":"Endpoint provenance, source-family, and migration-status metadata used to audit where visible values come from."},{"name":"Operations","description":"Health, readiness, and session endpoints for deployment checks and authenticated client bootstrapping."}],"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"paths":{"/api/v1/domains/{domain}/overview":{"get":{"tags":["Domain profile"],"summary":"Domain overview","description":"Aggregated profile used by the console, including per-section source and cache coverage. The rank section follows the rank history: a month whose rank falls in the unranked end of the ranking carries rank: null and rank_state: \"unranked\". Returns sections, cache, sourceCoverage. Example: `GET /api/v1/domains/logo.com/overview`.","operationId":"getDomainsDomainOverview","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/overview"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"sections, cache, sourceCoverage. Each entry in sections carries ok, status, data (the section's own response), cache and cacheTtlSeconds, coverage, and observedAt: the ISO time Atlas last read the section (now minus the source's reported fact age, or the edge cache's age). A failed section carries error instead of data.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}},"x-domain-atlas-section-errors":{"description":"Number of partial or unavailable sections in an aggregate domain profile response.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/overview","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Domain overview (HEAD)","description":"Check profile freshness, cache state, and aggregate section status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/overview`.","operationId":"headDomainsDomainOverview","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/overview"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}},"x-domain-atlas-section-errors":{"description":"Number of partial or unavailable sections in an aggregate domain profile response.","schema":{"type":"integer","minimum":0}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/overview","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/rank":{"get":{"tags":["Domain profile"],"summary":"Rank history","description":"AtlasRank series with the default 12-month boundary used by charts. A month whose rank falls in the unranked end of the ranking (the last 5% of it) is reported without its rank: the point keeps its date, its rank is null, and rank_state is \"unranked\". A change figure that would give such a rank back is null too. Returns rankings[]; a point withheld as unranked carries rank: null and rank_state: \"unranked\". Example: `GET /api/v1/domains/logo.com/rank?sources=atlas_rank&months=12`.","operationId":"getDomainsDomainRank","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/rank"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"rankings[]; a point withheld as unranked carries rank: null and rank_state: \"unranked\"","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/rank?sources=atlas_rank&months=12","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"sources","in":"query","required":false,"description":"Comma-separated rank sources. Charts use AtlasRank by default.","schema":{"type":"string","default":"atlas_rank","examples":["atlas_rank"]}},{"name":"months","in":"query","required":false,"description":"Number of monthly periods requested, ending with the previous calendar month. Unpublished or unavailable months may have no observation.","schema":{"type":"integer","default":12,"examples":[12],"minimum":1,"maximum":60}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Rank history (HEAD)","description":"Check AtlasRank freshness and cache status without downloading the history payload. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/rank?sources=atlas_rank&months=12`.","operationId":"headDomainsDomainRank","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/rank"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/rank?sources=atlas_rank&months=12","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"sources","in":"query","required":false,"description":"Comma-separated rank sources. Charts use AtlasRank by default.","schema":{"type":"string","default":"atlas_rank","examples":["atlas_rank"]}},{"name":"months","in":"query","required":false,"description":"Number of monthly periods requested, ending with the previous calendar month. Unpublished or unavailable months may have no observation.","schema":{"type":"integer","default":12,"examples":[12],"minimum":1,"maximum":60}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/registration":{"get":{"tags":["Domain profile"],"summary":"Registration","description":"Registrar, availability, age, and lifecycle dates for a registrable domain. Returns availability, registrar, expires_at. Example: `GET /api/v1/domains/logo.com/registration`.","operationId":"getDomainsDomainRegistration","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/registration"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"availability, registrar, expires_at","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/registration","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Registration (HEAD)","description":"Check registration data freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/registration`.","operationId":"headDomainsDomainRegistration","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/registration"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/registration","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/traffic":{"get":{"tags":["Domain profile"],"summary":"Traffic","description":"Traffic/query activity, trend summary, and chartable history when available. Pass months=12 for the 12-month series the profile charts use. Returns dns_queries, change. Example: `GET /api/v1/domains/logo.com/traffic?months=12`.","operationId":"getDomainsDomainTraffic","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/traffic"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"dns_queries, change","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/traffic?months=12","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"months","in":"query","required":false,"description":"Month boundary for traffic history points; omitted requests return only the latest period summary.","schema":{"type":"integer","examples":[12],"minimum":1,"maximum":60}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Traffic (HEAD)","description":"Check traffic data freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/traffic`.","operationId":"headDomainsDomainTraffic","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/traffic"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/traffic","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"months","in":"query","required":false,"description":"Month boundary for traffic history points; omitted requests return only the latest period summary.","schema":{"type":"integer","examples":[12],"minimum":1,"maximum":60}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/keywords":{"get":{"tags":["Domain profile"],"summary":"Keywords","description":"Atlas keyword enrichment with category, subcategory, keyword set, optional context, and provenance. Returns domain_info, keywords[] (keyword/score/source), keywords_by_source, category, subcategory, historical_context, commoncrawl_context, _meta. Example: `GET /api/v1/domains/logo.com/keywords`.","operationId":"getDomainsDomainKeywords","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/keywords"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"domain_info, keywords[] (keyword/score/source), keywords_by_source, category, subcategory, historical_context, commoncrawl_context, _meta","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordEnrichmentResponse"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/keywords","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"archive","in":"query","required":false,"description":"Include historical site context from the Wayback Machine snapshot. Adds seconds of latency. Alias: historical.","schema":{"type":"boolean","default":false,"examples":[true]}},{"name":"crawl","in":"query","required":false,"description":"Include Common Crawl site context. Adds seconds of latency. Alias: commoncrawl.","schema":{"type":"boolean","default":false,"examples":[true]}},{"name":"websearch","in":"query","required":false,"description":"Include web-search-grounded keywords. Degrades to a status message when the search backend is unavailable.","schema":{"type":"boolean","default":false,"examples":[false]}},{"name":"group_by","in":"query","required":false,"description":"Set to source to additionally return keywords_by_source, the keyword list grouped per source.","schema":{"type":"string","examples":["source"],"enum":["source"]}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Keywords (HEAD)","description":"Check keyword enrichment cache status without running a new enrichment request. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/keywords`.","operationId":"headDomainsDomainKeywords","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/keywords"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/keywords","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"archive","in":"query","required":false,"description":"Include historical site context from the Wayback Machine snapshot. Adds seconds of latency. Alias: historical.","schema":{"type":"boolean","default":false,"examples":[true]}},{"name":"crawl","in":"query","required":false,"description":"Include Common Crawl site context. Adds seconds of latency. Alias: commoncrawl.","schema":{"type":"boolean","default":false,"examples":[true]}},{"name":"websearch","in":"query","required":false,"description":"Include web-search-grounded keywords. Degrades to a status message when the search backend is unavailable.","schema":{"type":"boolean","default":false,"examples":[false]}},{"name":"group_by","in":"query","required":false,"description":"Set to source to additionally return keywords_by_source, the keyword list grouped per source.","schema":{"type":"string","examples":["source"],"enum":["source"]}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"post":{"tags":["Domain profile"],"summary":"Run keyword enrichment","description":"Run Atlas keyword enrichment with explicit context, cache, and instruction options. Returns domain_info, keywords[] (keyword/score/source), keywords_by_source, category, subcategory, historical_context, commoncrawl_context, _meta. Example: `POST /api/v1/domains/logo.com/keywords`.","operationId":"postDomainsDomainKeywords","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/POST/api/v1/domains/{domain}/keywords"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"domain_info, keywords[] (keyword/score/source), keywords_by_source, category, subcategory, historical_context, commoncrawl_context, _meta","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordEnrichmentResponse"}}}},"400":{"description":"The JSON request body was malformed or failed validation.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"The JSON request body exceeded the maximum accepted size.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"The request body content type must be application/json.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/domains/logo.com/keywords","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordEnrichmentRequest"}}}}}},"/api/v1/domains/{domain}/dns":{"get":{"tags":["Domain profile"],"summary":"DNS","description":"DNS records and nameserver data normalized for display and API consumption. Returns records, nameservers. Example: `GET /api/v1/domains/logo.com/dns`.","operationId":"getDomainsDomainDns","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/dns"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"records, nameservers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/dns","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"DNS (HEAD)","description":"Check DNS data freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/dns`.","operationId":"headDomainsDomainDns","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/dns"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/dns","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/subdomains":{"get":{"tags":["Domain profile"],"summary":"Subdomains","description":"Hostnames seen in certificate transparency logs for a registrable domain, deduped and sorted. Certificate transparency records certificates, not live hosts: a listed name may not resolve today, and a wildcard certificate contributes no name, so a wildcard-only domain answers empty. An empty list is an answer, not an error. Returns domain, subdomains[], count, sources[], truncated, _meta (status, observed_at, stale, fallback, sources[]). Example: `GET /api/v1/domains/logo.com/subdomains`.","operationId":"getDomainsDomainSubdomains","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/subdomains"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"domain, subdomains[], count, sources[], truncated, _meta (status, observed_at, stale, fallback, sources[])","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubdomainsResponse"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/subdomains","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls freshness for this read, upstream as well as at the edge — the one endpoint where live does more than bypass the Domain Atlas cache. tolerant serves the held certificate-transparency observation and marks it stale past 24 hours. live re-queries the transparency logs for an explicit refresh and can take up to 25 seconds.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Subdomains (HEAD)","description":"Check subdomain data freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/subdomains`.","operationId":"headDomainsDomainSubdomains","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/subdomains"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/subdomains","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls freshness for this read, upstream as well as at the edge — the one endpoint where live does more than bypass the Domain Atlas cache. tolerant serves the held certificate-transparency observation and marks it stale past 24 hours. live re-queries the transparency logs for an explicit refresh and can take up to 25 seconds.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/zone":{"get":{"tags":["Domain profile"],"summary":"Zone","description":"TLD family and zone coverage for the domain name. Returns sld, tld, tlds[]. Example: `GET /api/v1/domains/logo.com/zone`.","operationId":"getDomainsDomainZone","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/zone"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"sld, tld, tlds[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/zone","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Zone (HEAD)","description":"Check zone data freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/zone`.","operationId":"headDomainsDomainZone","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/zone"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/zone","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/trademarks":{"get":{"tags":["Domain profile"],"summary":"Trademarks","description":"Trademark and owner-overlap signals normalized for Atlas Marks. Returns count, matches[]. Example: `GET /api/v1/domains/logo.com/trademarks`.","operationId":"getDomainsDomainTrademarks","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/trademarks"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"count, matches[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/trademarks","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Domain profile"],"summary":"Trademarks (HEAD)","description":"Check trademark data freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/trademarks`.","operationId":"headDomainsDomainTrademarks","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/trademarks"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/trademarks","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/domains/{domain}/discovery":{"get":{"tags":["Domain profile"],"summary":"Discovery candidates","description":"Adjacent domain and certificate-derived candidate signals. Returns count, candidates[]. Example: `GET /api/v1/domains/logo.com/discovery`.","operationId":"getDomainsDomainDiscovery","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/discovery"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"count, candidates[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/discovery","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Domain profile"],"summary":"Discovery candidates (HEAD)","description":"Check adjacent-domain candidate metadata without downloading the JSON body. Returns ETag and cache headers. Example: `HEAD /api/v1/domains/logo.com/discovery`.","operationId":"headDomainsDomainDiscovery","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/discovery"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/discovery","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/domains/{domain}/technology":{"get":{"tags":["Domain profile"],"summary":"Technology","description":"Detected technology stack with confidence and evidence. Rules read the homepage crawl (HTML, scripts, response headers) and the domain's DNS (TXT verification tokens, MX, NS); each detection's evidence says which. Also returns the page metadata and response security headers from the crawl. Read crawl.status before technologies[]: an empty list only means \"runs nothing we fingerprint\" when the crawl completed. Returns technologies[], slugs[], page, security, crawl. Example: `GET /api/v1/domains/logo.com/technology`.","operationId":"getDomainsDomainTechnology","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/technology"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"technologies[], slugs[], page, security, crawl","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechnologyResponse"}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/technology","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"group_by","in":"query","required":false,"description":"Set to category to additionally return technologies_by_category.","schema":{"type":"string","examples":["category"],"enum":["category"]}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Domain profile"],"summary":"Technology (HEAD)","description":"Check technology freshness and cache status without downloading the JSON body. Returns cache and data-status headers. Example: `HEAD /api/v1/domains/logo.com/technology`.","operationId":"headDomainsDomainTechnology","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/technology"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/technology","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"group_by","in":"query","required":false,"description":"Set to category to additionally return technologies_by_category.","schema":{"type":"string","examples":["category"],"enum":["category"]}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/domains/{domain}/source-coverage":{"get":{"tags":["Domain profile"],"summary":"Domain source coverage","description":"Admin diagnostic for per-domain upstream capability coverage. Customers get the same coverage data embedded in the overview response as sourceCoverage. Returns primarySource, atlasApi, neededUpstream. Example: `GET /api/v1/domains/logo.com/source-coverage`. Requires a Domain Atlas admin account; non-admin credentials receive 403 admin_required.","operationId":"getDomainsDomainSourceCoverage","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/GET/api/v1/domains/{domain}/source-coverage"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"primarySource, atlasApi, neededUpstream","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCoverageResponse"}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The account is not a Domain Atlas admin (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/domains/logo.com/source-coverage","x-domain-atlas-admin":true,"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Domain profile"],"summary":"Domain source coverage (HEAD)","description":"Check whether per-domain source coverage metadata has changed without downloading the JSON body. Returns ETag and cache headers. Example: `HEAD /api/v1/domains/logo.com/source-coverage`. Requires a Domain Atlas admin account; non-admin credentials receive 403 admin_required.","operationId":"headDomainsDomainSourceCoverage","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/domain-profile/HEAD/api/v1/domains/{domain}/source-coverage"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The account is not a Domain Atlas admin (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/domains/logo.com/source-coverage","x-domain-atlas-admin":true,"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/atlas/domains":{"get":{"tags":["Research"],"summary":"Domain inventory","description":"Sortable domain inventory for research workflows. Supported query params are normalized and bounded; unknown params are ignored. Returns results[], count. Example: `GET /api/v1/atlas/domains?fields=domain,tld,owned&limit=250&sort=domain&direction=asc`.","operationId":"getAtlasDomains","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research/GET/api/v1/atlas/domains"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"results[], count","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/atlas/domains?fields=domain,tld,owned&limit=250&sort=domain&direction=asc","parameters":[{"name":"fields","in":"query","required":false,"description":"Fields to return. Repeat or comma-separate values. Defaults to the compact research row shape.","schema":{"type":"array","items":{"type":"string","enum":["domain","tld","owned","registrar","expires_at","nameservers_count"]},"default":["domain","tld","owned","registrar","expires_at","nameservers_count"],"examples":[["domain","tld","owned","registrar"]]},"style":"form","explode":true},{"name":"q","in":"query","required":false,"description":"Free-text domain search, normalized to 128 characters.","schema":{"type":"string","examples":["logo"]}},{"name":"registrar","in":"query","required":false,"description":"Registrar filter, normalized to 120 characters.","schema":{"type":"string","examples":["Cloudflare"]}},{"name":"tld","in":"query","required":false,"description":"Single-label TLD filter, with or without the leading dot. A multi-label suffix such as co.uk, or any value that is not one label, is refused with 400 invalid_tld (reason multi_label or invalid_tld).","schema":{"type":"string","examples":["com"]}},{"name":"owned","in":"query","required":false,"description":"Ownership filter.","schema":{"type":"boolean","examples":[true]}},{"name":"limit","in":"query","required":false,"description":"Maximum result count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Pagination offset.","schema":{"type":"integer","default":0,"examples":[0],"minimum":0,"maximum":100000}},{"name":"sort","in":"query","required":false,"description":"Sortable field.","schema":{"type":"string","default":"domain","examples":["domain"],"enum":["domain","tld","owned","registrar","expires_at","nameservers_count"]}},{"name":"direction","in":"query","required":false,"description":"Sort direction.","schema":{"type":"string","default":"asc","examples":["asc"],"enum":["asc","desc"]}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Research"],"summary":"Domain inventory (HEAD)","description":"Check inventory freshness and cache status without downloading result rows. Returns cache and data-status headers. Example: `HEAD /api/v1/atlas/domains?fields=domain,tld,owned&limit=250&sort=domain&direction=asc`.","operationId":"headAtlasDomains","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research/HEAD/api/v1/atlas/domains"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/atlas/domains?fields=domain,tld,owned&limit=250&sort=domain&direction=asc","parameters":[{"name":"fields","in":"query","required":false,"description":"Fields to return. Repeat or comma-separate values. Defaults to the compact research row shape.","schema":{"type":"array","items":{"type":"string","enum":["domain","tld","owned","registrar","expires_at","nameservers_count"]},"default":["domain","tld","owned","registrar","expires_at","nameservers_count"],"examples":[["domain","tld","owned","registrar"]]},"style":"form","explode":true},{"name":"q","in":"query","required":false,"description":"Free-text domain search, normalized to 128 characters.","schema":{"type":"string","examples":["logo"]}},{"name":"registrar","in":"query","required":false,"description":"Registrar filter, normalized to 120 characters.","schema":{"type":"string","examples":["Cloudflare"]}},{"name":"tld","in":"query","required":false,"description":"Single-label TLD filter, with or without the leading dot. A multi-label suffix such as co.uk, or any value that is not one label, is refused with 400 invalid_tld (reason multi_label or invalid_tld).","schema":{"type":"string","examples":["com"]}},{"name":"owned","in":"query","required":false,"description":"Ownership filter.","schema":{"type":"boolean","examples":[true]}},{"name":"limit","in":"query","required":false,"description":"Maximum result count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Pagination offset.","schema":{"type":"integer","default":0,"examples":[0],"minimum":0,"maximum":100000}},{"name":"sort","in":"query","required":false,"description":"Sortable field.","schema":{"type":"string","default":"domain","examples":["domain"],"enum":["domain","tld","owned","registrar","expires_at","nameservers_count"]}},{"name":"direction","in":"query","required":false,"description":"Sort direction.","schema":{"type":"string","default":"asc","examples":["asc"],"enum":["asc","desc"]}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/atlas/domains/schema":{"get":{"tags":["Research"],"summary":"Inventory schema","description":"Sortable/filterable field schema for the Atlas domain inventory. Returns fields[]. Example: `GET /api/v1/atlas/domains/schema`.","operationId":"getAtlasDomainsSchema","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research/GET/api/v1/atlas/domains/schema"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"fields[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/atlas/domains/schema"},"head":{"tags":["Research"],"summary":"Inventory schema (HEAD)","description":"Check inventory schema freshness and cache status without downloading field metadata. Returns cache and data-status headers. Example: `HEAD /api/v1/atlas/domains/schema`.","operationId":"headAtlasDomainsSchema","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research/HEAD/api/v1/atlas/domains/schema"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/atlas/domains/schema"}},"/api/v1/tlds":{"get":{"tags":["Research"],"summary":"TLD directory","description":"TLD directory and coverage metadata used by research workflows. Supported query params are normalized and bounded; unknown params are ignored. Returns tlds[]. Example: `GET /api/v1/tlds?limit=250`.","operationId":"getTlds","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research/GET/api/v1/tlds"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"tlds[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/tlds?limit=250","parameters":[{"name":"q","in":"query","required":false,"description":"Free-text TLD search, normalized to 80 characters.","schema":{"type":"string","examples":["io"]}},{"name":"limit","in":"query","required":false,"description":"Maximum result count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Pagination offset.","schema":{"type":"integer","default":0,"examples":[0],"minimum":0,"maximum":100000}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]},"head":{"tags":["Research"],"summary":"TLD directory (HEAD)","description":"Check TLD directory freshness and cache status without downloading result rows. Returns cache and data-status headers. Example: `HEAD /api/v1/tlds?limit=250`.","operationId":"headTlds","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research/HEAD/api/v1/tlds"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"cache and data-status headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"x-domain-atlas-cache":{"description":"Cache state for data-backed responses.","schema":{"type":"string","enum":["hit","miss","stale","bypass","mixed"]}},"x-domain-atlas-cache-ttl":{"description":"Remaining cache TTL in seconds when a cache entry is available.","schema":{"type":"integer","minimum":0}},"x-domain-atlas-served-by":{"description":"Which layer answered: the edge cache (edge-hit, edge-stale) or the upstream data service, from its held fact (upstream-fact) or a cold lookup (upstream-cold). Plain upstream when the service reports neither.","schema":{"type":"string","enum":["edge-hit","edge-stale","upstream-fact","upstream-cold","upstream"]}},"x-domain-atlas-data-status":{"description":"Data resolution status. Direct data endpoints use the upstream status code; aggregate endpoints use ok or partial.","schema":{"type":"string"}},"x-domain-atlas-refresh-status":{"description":"Present when explicit refresh failure metadata is available. Tolerant stale reads can refresh in the background without this header.","schema":{"type":"string","enum":["failed"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/tlds?limit=250","parameters":[{"name":"q","in":"query","required":false,"description":"Free-text TLD search, normalized to 80 characters.","schema":{"type":"string","examples":["io"]}},{"name":"limit","in":"query","required":false,"description":"Maximum result count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"offset","in":"query","required":false,"description":"Pagination offset.","schema":{"type":"integer","default":0,"examples":[0],"minimum":0,"maximum":100000}},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}}]}},"/api/v1/top-lists/{source}":{"get":{"tags":["Top lists"],"summary":"Top list","description":"Sortable global AtlasRank list with top, new, risers, fallers, and exited modes. atlas_rank is the only supported public source; search, ordering, and limiting are applied by the native upstream list endpoint. An unfiltered top list (no rank_max, tld or q) has no total_count, because that total is the size of the ranking, which is not published; page it with next_offset. For the same reason a list without rank_max is never read in descending rank order (400 rank_order_requires_rank_max), and a rank in the unranked end of the ranking is withheld: the row has no rank (or previousRank) and says rankState (or previousRankState) \"unranked\". Risers and fallers leave such rows out and count them in excluded_tail_count. Returns source, mode, count, rows[], offset and next_offset when paging, total_count except on an unfiltered top list; a withheld rank reads rankState: \"unranked\". Example: `GET /api/v1/top-lists/atlas_rank?mode=top&limit=250`.","operationId":"getTopListsSource","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/top-lists/GET/api/v1/top-lists/{source}"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"source, mode, count, rows[], offset and next_offset when paging, total_count except on an unfiltered top list; a withheld rank reads rankState: \"unranked\"","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/top-lists/atlas_rank?mode=top&limit=250","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string"},"description":"source identifier."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}},{"name":"q","in":"query","required":false,"description":"Optional domain text filter, applied before pagination.","schema":{"type":"string","examples":["logo"]}},{"name":"mode","in":"query","required":false,"description":"List mode for sortable AtlasRank discovery views.","schema":{"type":"string","default":"top","examples":["risers"],"enum":["top","new","risers","fallers","exited"]}},{"name":"limit","in":"query","required":false,"description":"Maximum result count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"rank_max","in":"query","required":false,"description":"Top mode only: include domains with a global AtlasRank at or better than this cutoff, before pagination.","schema":{"type":"integer","examples":[1000],"minimum":1,"maximum":100000}},{"name":"offset","in":"query","required":false,"description":"Top mode only: offset within the filtered rankings. The response includes next_offset when another page exists, and total_count on a rank_max or tld view and on a q view that matched part of the ranking; an unfiltered top list omits total_count. count is the current page length.","schema":{"type":"integer","default":0,"examples":[250],"minimum":0,"maximum":100000}},{"name":"tld","in":"query","required":false,"description":"Top mode only: single-label TLD filter applied before pagination. A multi-label suffix such as co.uk, or any value that is not one label, is refused with 400 invalid_tld (reason multi_label or invalid_tld).","schema":{"type":"string","examples":["com"]}},{"name":"sort","in":"query","required":false,"description":"Top mode only: global ordering within the selected ranking set.","schema":{"type":"string","default":"rank","examples":["rank"],"enum":["rank","domain","tld"]}},{"name":"direction","in":"query","required":false,"description":"Top mode only: ordering direction; rank ascending puts the best rank first. Descending rank order (sort=rank, or no sort, with direction=desc) needs rank_max: without it the request is refused with 400 rank_order_requires_rank_max.","schema":{"type":"string","default":"asc","examples":["asc"],"enum":["asc","desc"]}},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Top lists"],"summary":"Top list (HEAD)","description":"Check top-list metadata without downloading rows. Returns ETag and cache headers. Example: `HEAD /api/v1/top-lists/atlas_rank?mode=top&limit=250`.","operationId":"headTopListsSource","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/top-lists/HEAD/api/v1/top-lists/{source}"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/top-lists/atlas_rank?mode=top&limit=250","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string"},"description":"source identifier."},{"name":"freshness","in":"query","required":false,"description":"Controls cache tolerance for data-backed reads. live bypasses the Domain Atlas cache but does not guarantee newer source data. Use observation dates in the response to assess data age.","schema":{"type":"string","default":"tolerant","examples":["live"],"enum":["live","relaxed","tolerant"]}},{"name":"q","in":"query","required":false,"description":"Optional domain text filter, applied before pagination.","schema":{"type":"string","examples":["logo"]}},{"name":"mode","in":"query","required":false,"description":"List mode for sortable AtlasRank discovery views.","schema":{"type":"string","default":"top","examples":["risers"],"enum":["top","new","risers","fallers","exited"]}},{"name":"limit","in":"query","required":false,"description":"Maximum result count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"rank_max","in":"query","required":false,"description":"Top mode only: include domains with a global AtlasRank at or better than this cutoff, before pagination.","schema":{"type":"integer","examples":[1000],"minimum":1,"maximum":100000}},{"name":"offset","in":"query","required":false,"description":"Top mode only: offset within the filtered rankings. The response includes next_offset when another page exists, and total_count on a rank_max or tld view and on a q view that matched part of the ranking; an unfiltered top list omits total_count. count is the current page length.","schema":{"type":"integer","default":0,"examples":[250],"minimum":0,"maximum":100000}},{"name":"tld","in":"query","required":false,"description":"Top mode only: single-label TLD filter applied before pagination. A multi-label suffix such as co.uk, or any value that is not one label, is refused with 400 invalid_tld (reason multi_label or invalid_tld).","schema":{"type":"string","examples":["com"]}},{"name":"sort","in":"query","required":false,"description":"Top mode only: global ordering within the selected ranking set.","schema":{"type":"string","default":"rank","examples":["rank"],"enum":["rank","domain","tld"]}},{"name":"direction","in":"query","required":false,"description":"Top mode only: ordering direction; rank ascending puts the best rank first. Descending rank order (sort=rank, or no sort, with direction=desc) needs rank_max: without it the request is refused with 400 rank_order_requires_rank_max.","schema":{"type":"string","default":"asc","examples":["asc"],"enum":["asc","desc"]}},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/discovery/{feed}":{"get":{"tags":["Discovery"],"summary":"Discovery feed","description":"Discovery feed rows for marks, newly issued certificate candidates, and newly registered domains. Returns feed, count, rows[]. Example: `GET /api/v1/discovery/ssl?limit=250`.","operationId":"getDiscoveryFeed","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/discovery/GET/api/v1/discovery/{feed}"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"feed, count, rows[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/discovery/ssl?limit=250","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"},"description":"feed identifier."},{"name":"q","in":"query","required":false,"description":"Optional searchable text across domain, mark, owner, status, availability, and candidate fields.","schema":{"type":"string","examples":["coffee"]}},{"name":"date","in":"query","required":false,"description":"Optional observation date for marks, new certificate, and NRD feeds.","schema":{"type":"string","examples":["2026-06-22"]}},{"name":"dates","in":"query","required":false,"description":"Optional comma-separated or repeated observation dates for merged discovery browsing.","schema":{"type":"array","items":{"type":"string"},"examples":[["2026-06-22","2026-06-23"]]},"style":"form","explode":true},{"name":"limit","in":"query","required":false,"description":"Maximum feed row count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Discovery"],"summary":"Discovery feed (HEAD)","description":"Check discovery feed metadata without downloading rows. Returns ETag and cache headers. Example: `HEAD /api/v1/discovery/nrd?limit=250`.","operationId":"headDiscoveryFeed","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/discovery/HEAD/api/v1/discovery/{feed}"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/discovery/nrd?limit=250","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"},"description":"feed identifier."},{"name":"q","in":"query","required":false,"description":"Optional searchable text across domain, mark, owner, status, availability, and candidate fields.","schema":{"type":"string","examples":["coffee"]}},{"name":"date","in":"query","required":false,"description":"Optional observation date for marks, new certificate, and NRD feeds.","schema":{"type":"string","examples":["2026-06-22"]}},{"name":"dates","in":"query","required":false,"description":"Optional comma-separated or repeated observation dates for merged discovery browsing.","schema":{"type":"array","items":{"type":"string"},"examples":[["2026-06-22","2026-06-23"]]},"style":"form","explode":true},{"name":"limit","in":"query","required":false,"description":"Maximum feed row count.","schema":{"type":"integer","default":250,"examples":[250],"minimum":1,"maximum":500}},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/discovery/{feed}/dates":{"get":{"tags":["Discovery"],"summary":"Discovery feed dates","description":"List available upstream observation dates for marks, newly issued certificate candidates, and NRD rows. Returns feed, count, dates[]. Example: `GET /api/v1/discovery/ssl/dates`.","operationId":"getDiscoveryFeedDates","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/discovery/GET/api/v1/discovery/{feed}/dates"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"feed, count, dates[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/discovery/ssl/dates","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"},"description":"feed identifier."},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Discovery"],"summary":"Discovery feed dates (HEAD)","description":"Check discovery date-index metadata without downloading rows. Returns ETag and cache headers. Example: `HEAD /api/v1/discovery/trademarks/dates`.","operationId":"headDiscoveryFeedDates","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/discovery/HEAD/api/v1/discovery/{feed}/dates"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited, or the monthly credits are spent (credits_exhausted): Retry-After is then the seconds until the allowance refills and the X-Credits-* headers report the balance.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}},"X-Credits-Limit":{"description":"The scope's monthly allowance in credits (the organization's when the caller belongs to one). Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[100]}},"X-Credits-Remaining":{"description":"Credits left this month after this request. A domain lookup costs 10, any other API request 1. Usage is recorded as each response completes, so the figure may lag requests made concurrently with this one; GET /api/v1/session reports the settled balance. Absent when the plan has no monthly ceiling. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[90]}},"X-Credits-Reset":{"description":"When the allowance refills: the first instant of the next UTC month, ISO 8601. Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"string","format":"date-time","examples":["2026-10-01T00:00:00.000Z"]}},"X-Credits-Charged":{"description":"Credits this request cost: 10 for a domain lookup, 1 for another API request, 0 for a repeat lookup of the same domain inside 30 minutes, a refused request, or a failed one (neither is billed). Sent on responses billed to an API key or OAuth token, and on domain lookups (GET /api/v1/domains/{domain}/overview) for a signed-in session; absent otherwise.","schema":{"type":"integer","minimum":0,"examples":[10,0]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/discovery/trademarks/dates","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"},"description":"feed identifier."},{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/api-keys":{"get":{"tags":["Customer API"],"summary":"List API keys","description":"List customer keys, the current effective activeKeyLimit, aggregate counters, and the top 5 endpoint families per key. Existing keys remain listed after a plan downgrade. Returns keys[], activeKeyLimit, usageByEndpoint[]. Example: `GET /api/v1/api-keys`.","operationId":"getApiKeys","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/customer-api/GET/api/v1/api-keys"},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"keys[], activeKeyLimit, usageByEndpoint[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListResponse"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/api-keys"},"post":{"tags":["Customer API"],"summary":"Create an API key","description":"Create a revocable customer API key within the account's current plan allowance, capped at 20 active keys. GET /api/v1/api-keys returns the effective activeKeyLimit. The raw token is shown only once. Returns id, key, keyPrefix. Example: `POST /api/v1/api-keys`.","operationId":"postApiKeys","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/customer-api/POST/api/v1/api-keys"},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"id, key, keyPrefix","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"}}}},"400":{"description":"The JSON request body was malformed or failed validation.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"The request conflicts with the current account or resource state.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"The JSON request body exceeded the maximum accepted size.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"The request body content type must be application/json.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/api-keys","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}}}}},"/api/v1/api-keys/{id}":{"delete":{"tags":["Customer API"],"summary":"Revoke an API key","description":"Revoke one key owned by the current user. Returns revoked. Example: `DELETE /api/v1/api-keys/key_...`.","operationId":"deleteApiKeysId","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/customer-api/DELETE/api/v1/api-keys/{id}"},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"revoked","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"The request conflicts with the current account or resource state.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"DELETE /api/v1/api-keys/key_...","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"id identifier."}]}},"/api/v1/recent-searches":{"get":{"tags":["Research state"],"summary":"Recent searches","description":"List the current user's recent domain lookups for the console. Returns searches[]. Example: `GET /api/v1/recent-searches`.","operationId":"getRecentSearches","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/GET/api/v1/recent-searches"},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"searches[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentSearchListResponse"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/recent-searches"},"post":{"tags":["Research state"],"summary":"Record a recent search","description":"Record one normalized domain lookup in the current user's recent searches. Returns search. Example: `POST /api/v1/recent-searches`.","operationId":"postRecentSearches","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/POST/api/v1/recent-searches"},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"search","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentSearchCreateResponse"}}}},"400":{"description":"The JSON request body was malformed or failed validation.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"The request conflicts with the current account or resource state.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"The JSON request body exceeded the maximum accepted size.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"The request body content type must be application/json.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/recent-searches","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentSearchCreateRequest"}}}}}},"/api/v1/saved-domains":{"get":{"tags":["Research state"],"summary":"Saved domains","description":"List up to 100 saved domains in alphabetical order, with page-scoped email settings and snapshots. Follow nextCursor until null to read the entire list. The response includes the total and effective Account plan allowance: Free 0, Pro 100, Enterprise uncapped (null). Downgrades preserve saved data and pause monitoring when ineligible. Returns domains[] with emailUpdates, snapshots, total, limit, planName, monitoringEnabled, nextCursor. Example: `GET /api/v1/saved-domains`.","operationId":"getSavedDomains","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/GET/api/v1/saved-domains"},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"domains[] with emailUpdates, snapshots, total, limit, planName, monitoringEnabled, nextCursor","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedDomainListResponse"}}}},"400":{"description":"A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/saved-domains","parameters":[{"name":"cursor","in":"query","required":false,"description":"Opaque nextCursor from the previous page. Omit for the first page.","schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"description":"Optional normalized domain filter for exact membership checks, including domains beyond the first page.","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Send fields=domains to return only saved-domain membership and skip both notification settings and snapshots (cheaper when you only need membership).","schema":{"type":"string","enum":["domains"]}}]},"post":{"tags":["Research state"],"summary":"Save a domain","description":"Save or update one normalized domain under the effective Account plan allowance (Free 0, Pro 100, Enterprise uncapped). At capacity, a new domain returns 409 saved_domain_limit_reached and existing saves are preserved; remove a domain to make room. Existing-domain label updates, removal, and disabling email remain available after downgrade. Enabling email while monitoring is paused returns 403 watchlist_monitoring_paused. Set emailUpdates to replace its frequency and topics while preserving delivery history, set it to null to disable updates, or omit it to preserve the current setting. Frequency daily, weekly, monthly, or quarterly sends a digest on that UTC calendar cadence; on_change checks the domain once a day and emails only when a selected topic differs from the last email, with no baseline email when you switch to it. Returns domain, emailUpdates when changed. Example: `POST /api/v1/saved-domains`.","operationId":"postSavedDomains","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/POST/api/v1/saved-domains"},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"domain, emailUpdates when changed","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedDomainSaveResponse"}}}},"400":{"description":"The JSON request body was malformed or failed validation. A path or query value was not one this route accepts.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. Email updates need a verified account email, or watchlist monitoring is not included in the current plan. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"The request conflicts with the current account or resource state.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"The JSON request body exceeded the maximum accepted size.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"The request body content type must be application/json.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/saved-domains","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedDomainSaveRequest"}}}}}},"/api/v1/saved-domains/{domain}":{"delete":{"tags":["Research state"],"summary":"Remove a saved domain","description":"Remove one saved domain from the current user's research workspace. Returns deleted. Example: `DELETE /api/v1/saved-domains/logo.com`.","operationId":"deleteSavedDomainsDomain","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/DELETE/api/v1/saved-domains/{domain}"},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"deleted","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedDomainDeleteResponse"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"The request conflicts with the current account or resource state.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"DELETE /api/v1/saved-domains/logo.com","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain. Subdomains and protocols are normalized."}]}},"/api/v1/watchlist-email/unsubscribe/{token}":{"post":{"tags":["Research state"],"summary":"Unsubscribe watchlist email","description":"One-click unsubscribe using the opaque token from a watchlist email. It disables every watchlist email update for the token owner's account, and the response never reveals whether the token existed. Returns no content. Example: `POST /api/v1/watchlist-email/unsubscribe/<opaque-token>`.","operationId":"postWatchlistEmailUnsubscribeToken","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/POST/api/v1/watchlist-email/unsubscribe/{token}"},"security":[],"responses":{"204":{"description":"no content","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request parameters were invalid.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/watchlist-email/unsubscribe/<opaque-token>","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Opaque one-click unsubscribe token from a watchlist email."}]}},"/api/v1/research-state/cohort-metrics":{"post":{"tags":["Research state"],"summary":"Cohort metrics","description":"Hydrate up to 250 domains with AtlasRank, rank change, traffic (derived from Atlas Score), traffic change, and a 12-month rank sparkline for the cohort grid. A latest rank in the unranked end of the ranking is withheld: atlasRank is null and atlasRankState is \"unranked\". Returns results[], freshness. Example: `POST /api/v1/research-state/cohort-metrics`.","operationId":"postResearchStateCohortMetrics","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/POST/api/v1/research-state/cohort-metrics"},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"results[], freshness","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMetricsResponse"}}}},"400":{"description":"The JSON request body was malformed or failed validation.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"The JSON request body exceeded the maximum accepted size.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"The request body content type must be application/json.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/research-state/cohort-metrics","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMetricsRequest"}}}}}},"/api/v1/research-state/saved-domains/seen":{"post":{"tags":["Research state"],"summary":"Mark watchlist seen","description":"Advance the watchlist change-since-last-visit baseline for the current user's saved domains. Returns no content. Example: `POST /api/v1/research-state/saved-domains/seen`.","operationId":"postResearchStateSavedDomainsSeen","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/research-state/POST/api/v1/research-state/saved-domains/seen"},"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"no content","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}}},"400":{"description":"The JSON request body was malformed or failed validation.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"This route needs an interactive session; API keys receive session_required. A session-backed write came from an untrusted browser origin (untrusted_origin). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"The JSON request body exceeded the maximum accepted size.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"The request body content type must be application/json.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Account storage is not ready (database_not_ready).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"POST /api/v1/research-state/saved-domains/seen","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistSeenRequest"}}}}}},"/api/v1/source-coverage":{"get":{"tags":["Source coverage"],"summary":"Source coverage","description":"Admin diagnostic tracker for covered and still-required upstream capabilities. Returns primarySource, atlasApi, neededUpstream. Example: `GET /api/v1/source-coverage`. Requires a Domain Atlas admin account; non-admin credentials receive 403 admin_required.","operationId":"getSourceCoverage","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/source-coverage/GET/api/v1/source-coverage"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"primarySource, atlasApi, neededUpstream","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCoverageResponse"}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The account is not a Domain Atlas admin (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/source-coverage","x-domain-atlas-admin":true,"parameters":[{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Source coverage"],"summary":"Source coverage (HEAD)","description":"Check whether source coverage metadata has changed without downloading the JSON body. Returns ETag and cache headers. Example: `HEAD /api/v1/source-coverage`. Requires a Domain Atlas admin account; non-admin credentials receive 403 admin_required.","operationId":"headSourceCoverage","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/source-coverage/HEAD/api/v1/source-coverage"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The account is not a Domain Atlas admin (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/source-coverage","x-domain-atlas-admin":true,"parameters":[{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/data-endpoints":{"get":{"tags":["Source coverage"],"summary":"Data endpoint map","description":"Developer-only endpoint map showing how Domain Atlas routes resolve internally. The internal=true view requires an admin account. Returns summary, endpoints[]. Example: `GET /api/v1/data-endpoints`.","operationId":"getDataEndpoints","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/source-coverage/GET/api/v1/data-endpoints"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"summary, endpoints[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataEndpointMapResponse"}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The internal=true view needs an admin account (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/data-endpoints","parameters":[{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Source coverage"],"summary":"Data endpoint map (HEAD)","description":"Check whether the data endpoint map has changed without downloading the JSON body. Returns ETag and cache headers. Example: `HEAD /api/v1/data-endpoints`.","operationId":"headDataEndpoints","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/source-coverage/HEAD/api/v1/data-endpoints"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The internal=true view needs an admin account (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/data-endpoints","parameters":[{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/data-freshness":{"get":{"tags":["Source coverage"],"summary":"Data freshness","description":"Admin freshness map proxied from the domain data service, including row counts and pipeline diagnostics. Returns checkedAt, count, rows[]. Example: `GET /api/v1/data-freshness`. Requires a Domain Atlas admin account; non-admin credentials receive 403 admin_required.","operationId":"getDataFreshness","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/source-coverage/GET/api/v1/data-freshness"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"checkedAt, count, rows[]","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The account is not a Domain Atlas admin (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/data-freshness","x-domain-atlas-admin":true,"parameters":[{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]},"head":{"tags":["Source coverage"],"summary":"Data freshness (HEAD)","description":"Check whether data freshness metadata has changed without downloading the JSON body. Returns ETag and cache headers. Example: `HEAD /api/v1/data-freshness`. Requires a Domain Atlas admin account; non-admin credentials receive 403 admin_required.","operationId":"headDataFreshness","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/source-coverage/HEAD/api/v1/data-freshness"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"ETag and cache headers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"304":{"description":"The metadata representation has not changed.","headers":{"ETag":{"description":"Weak entity tag for conditional revalidation with If-None-Match.","schema":{"type":"string","examples":["W/\"c9c23c00-3501\""]}},"Cache-Control":{"description":"Response caching policy.","schema":{"type":"string","examples":["private, max-age=60, must-revalidate"]}},"Vary":{"description":"Request headers that affect the response representation.","schema":{"type":"string","examples":["Authorization, Cookie, Accept-Encoding"]}}}},"401":{"description":"Authentication is required.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"The account is not a Domain Atlas admin (admin_required). A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The data request returned an invalid or unavailable response.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The data source is unavailable or not configured.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"504":{"description":"The data request reached its latency budget.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"HEAD /api/v1/data-freshness","x-domain-atlas-admin":true,"parameters":[{"name":"If-None-Match","in":"header","required":false,"description":"Send a previous ETag value to receive 304 Not Modified when metadata is unchanged.","schema":{"type":"string"}}]}},"/api/v1/health":{"get":{"tags":["Operations"],"summary":"Health","description":"Worker liveness and configuration status. Returns status, app, dataSourceConfigured, database. Example: `GET /api/v1/health`.","operationId":"getHealth","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/operations/GET/api/v1/health"},"security":[],"responses":{"200":{"description":"status, app, dataSourceConfigured, database","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/health"}},"/api/v1/readiness":{"get":{"tags":["Operations"],"summary":"Readiness","description":"Production readiness checks without exposing secrets. Non-admin callers receive only the overall status. Returns status; checks[] and summary for admins. Example: `GET /api/v1/readiness`.","operationId":"getReadiness","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/operations/GET/api/v1/readiness"},"security":[],"responses":{"200":{"description":"status; checks[] and summary for admins","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessResponse"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"A required readiness check is failing; the body reports not_ready.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/readiness"}},"/api/v1/session":{"get":{"tags":["Operations"],"summary":"Session","description":"Current browser/API authentication state with public-safe account display metadata and enabled login providers. Returns authenticated, account, providers. Example: `GET /api/v1/session`.","operationId":"getSession","externalDocs":{"description":"Link to this endpoint","url":"https://domainatlas.com/docs#tag/operations/GET/api/v1/session"},"security":[{"domainAtlasApiKey":[]},{"sessionCookie":[]}],"responses":{"200":{"description":"authenticated, account, providers","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"403":{"description":"A browser preflight requested unsupported headers (cors_header_not_allowed).","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"The requested Domain Atlas API route was not found.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"The API route exists but does not support this HTTP method.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Allow":{"description":"HTTP methods supported by this API route.","schema":{"type":"string","examples":["GET, OPTIONS"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"The actor or endpoint family is rate limited.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}},"Retry-After":{"description":"Seconds to wait before retrying a rate-limited or temporarily unavailable request. On a 429 credits_exhausted it is the seconds until the monthly allowance refills (the start of the next UTC month, the instant X-Credits-Reset names); a true rate limit sends its own shorter window.","schema":{"type":"integer","minimum":1}},"x-domain-atlas-rate-limit":{"description":"Present when the request was rate limited.","schema":{"type":"string","enum":["limited"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"The request could not be completed.","headers":{"x-request-id":{"description":"Request identifier for support, logs, and retries.","schema":{"type":"string"}},"x-domain-atlas-duration-ms":{"description":"Domain Atlas Worker request duration in milliseconds.","schema":{"type":"number","minimum":0,"examples":[12.4]}},"Server-Timing":{"description":"Server-Timing metrics for the Domain Atlas Worker request: the `app` total, plus `auth`, `credits`, `ratelimit`, `cache` and `upstream` spans for the steps the request took (`roles` and `plan` on the session route, `dbhealth` on account routes) and `colo` naming the data centre that answered.","schema":{"type":"string","examples":["app;dur=12.4","app;dur=12.4, auth;dur=3.1, cache;dur=1.2, colo;desc=\"LHR\""]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"x-domain-atlas-example":"GET /api/v1/session"}}},"components":{"securitySchemes":{"domainAtlasApiKey":{"type":"http","scheme":"bearer","bearerFormat":"Domain Atlas API key","description":"Use an Authorization header with a Domain Atlas API key."},"sessionCookie":{"type":"apiKey","in":"cookie","name":"Domain Atlas session","description":"Interactive browser session cookie used by the console."}},"schemas":{"ApiKeyCreateRequest":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"Human-readable key name shown in the console.","examples":["Production API"]}}},"ApiKeyCreateResponse":{"type":"object","required":["id","name","key","keyPrefix","createdAt"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string","description":"Raw Domain Atlas API key. It is returned only once.","examples":["<domain-atlas-api-key>"]},"keyPrefix":{"type":"string"},"createdAt":{"type":"integer"}}},"ApiKeyUsageEndpoint":{"type":"object","additionalProperties":false,"required":["endpoint","requests7d","errors7d","lastStatus","lastUsedAt"],"properties":{"endpoint":{"type":"string","description":"Canonicalized Domain Atlas endpoint bucket.","examples":["/api/v1/domains/:domain/rank"]},"requests7d":{"type":"integer","minimum":0},"errors7d":{"type":"integer","minimum":0},"lastStatus":{"type":["integer","null"],"minimum":100,"maximum":599},"lastUsedAt":{"type":["integer","null"]}}},"ApiKeyListItem":{"type":"object","additionalProperties":false,"required":["id","name","keyPrefix","createdAt","lastUsedAt","revokedAt","requests24h","requests7d","requests30d","errors7d","usageByEndpoint"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"createdAt":{"type":["integer","null"]},"lastUsedAt":{"type":["integer","null"]},"revokedAt":{"type":["integer","null"]},"requests24h":{"type":"integer","minimum":0},"requests7d":{"type":"integer","minimum":0},"requests30d":{"type":"integer","minimum":0},"errors7d":{"type":"integer","minimum":0},"usageByEndpoint":{"type":"array","maxItems":5,"items":{"$ref":"#/components/schemas/ApiKeyUsageEndpoint"}}}},"ApiKeyListResponse":{"type":"object","additionalProperties":false,"required":["keys","activeKeyLimit"],"properties":{"activeKeyLimit":{"type":["integer","null"],"minimum":1,"maximum":20,"description":"Current effective plan allowance for creating active API keys, capped at the service maximum; null means no ceiling (internal organizations). The limit only gates creating new keys: keys you already hold keep working after a downgrade puts the account above it.","examples":[1,5,null]},"keys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyListItem"}}}},"RecentSearchCreateRequest":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","description":"Domain or URL. Protocols and subdomains are normalized to the registrable domain.","examples":["https://www.logo.com/path"]}}},"RecentSearchResponse":{"type":"object","required":["id","domain","createdAt"],"properties":{"id":{"type":"string"},"domain":{"type":"string","examples":["logo.com"]},"createdAt":{"type":"integer"}}},"RecentSearchCreateResponse":{"type":"object","required":["ok","search"],"properties":{"ok":{"type":"boolean"},"search":{"type":"object","required":["domain","createdAt"],"properties":{"domain":{"type":"string","examples":["logo.com"]},"createdAt":{"type":"integer"}}}}},"RecentSearchListResponse":{"type":"object","required":["searches"],"properties":{"searches":{"type":"array","items":{"$ref":"#/components/schemas/RecentSearchResponse"}}}},"WatchlistEmailUpdateRequest":{"type":"object","additionalProperties":false,"required":["frequency","topics"],"properties":{"frequency":{"type":"string","enum":["daily","weekly","monthly","quarterly","on_change"],"description":"UTC calendar cadence for this saved domain's email update, or on_change: the domain is checked once a day and emailed only when a selected topic differs from the last email sent. Choosing on_change records the current values as the baseline without sending an email, so the first email is the first change."},"topics":{"type":"array","minItems":1,"maxItems":4,"uniqueItems":true,"items":{"type":"string","enum":["rank","traffic","dns","registration"]},"description":"Metrics to include: AtlasRank, traffic (derived from Atlas Score, the composite metric behind AtlasRank), DNS, and/or registration."}}},"WatchlistEmailUpdateResponse":{"type":"object","additionalProperties":false,"required":["frequency","topics","nextDeliveryAt","lastSentAt","lastErrorCode"],"properties":{"frequency":{"type":"string","enum":["daily","weekly","monthly","quarterly","on_change"]},"topics":{"type":"array","minItems":1,"maxItems":4,"uniqueItems":true,"items":{"type":"string","enum":["rank","traffic","dns","registration"]}},"nextDeliveryAt":{"type":["integer","null"],"description":"Earliest eligibility time as Unix epoch milliseconds; the hourly handler may send on or after it subject to capacity and retry backoff. For on_change it is the next daily check, which sends only if a selected topic changed. Null with E_RECIPIENT_SUPPRESSED means this retained setting is paused."},"lastSentAt":{"type":["integer","null"],"description":"Most recent email accepted for sending as Unix epoch milliseconds."},"lastErrorCode":{"type":["string","null"],"description":"Public-safe code for the latest delivery failure, cleared after success or reconfiguration. E_RECIPIENT_SUPPRESSED pauses delivery and pairs with a null nextDeliveryAt until the setting is re-saved."}}},"SavedDomainSaveRequest":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","description":"Domain or URL. Protocols and subdomains are normalized to the registrable domain.","examples":["https://www.logo.com/path"]},"label":{"type":"string","minLength":1,"maxLength":80,"description":"Optional label for the saved domain.","examples":["Logo watch"]},"emailUpdates":{"description":"Replace the email cadence and topics, send null to disable, or omit this property to preserve the current setting.","oneOf":[{"$ref":"#/components/schemas/WatchlistEmailUpdateRequest"},{"type":"null"}]}}},"SavedDomainMembershipResponse":{"type":"object","additionalProperties":false,"required":["id","domain","root","label","createdAt","lastOpenedAt"],"properties":{"id":{"type":"string"},"domain":{"type":"string","examples":["logo.com"]},"root":{"type":["string","null"],"examples":["logo"]},"label":{"type":["string","null"]},"createdAt":{"type":"integer"},"lastOpenedAt":{"type":["integer","null"]}}},"SavedDomainResponse":{"type":"object","additionalProperties":false,"required":["id","domain","root","label","createdAt","lastOpenedAt","emailUpdates"],"properties":{"id":{"type":"string"},"domain":{"type":"string","examples":["logo.com"]},"root":{"type":["string","null"],"examples":["logo"]},"label":{"type":["string","null"]},"createdAt":{"type":"integer"},"lastOpenedAt":{"type":["integer","null"]},"emailUpdates":{"oneOf":[{"$ref":"#/components/schemas/WatchlistEmailUpdateResponse"},{"type":"null"}]}}},"SavedDomainSaveResponse":{"type":"object","required":["ok","domain"],"properties":{"ok":{"type":"boolean"},"domain":{"type":"string","examples":["logo.com"]},"emailUpdates":{"description":"Present only when the request explicitly replaced or disabled email updates.","oneOf":[{"$ref":"#/components/schemas/WatchlistEmailUpdateResponse"},{"type":"null"}]}}},"SavedDomainFullListResponse":{"type":"object","additionalProperties":false,"required":["domains","snapshots","total","limit","planName","monitoringEnabled","nextCursor"],"properties":{"total":{"type":"integer","minimum":0,"description":"Total saved domains across all pages."},"limit":{"type":["integer","null"],"minimum":0,"description":"Effective watchlist allowance; null means no plan cap."},"planName":{"type":"string"},"monitoringEnabled":{"type":"boolean","description":"False on Free or when a saved list exceeds its current allowance. Existing data is preserved."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null when this is the last page."},"domains":{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/SavedDomainResponse"}},"snapshots":{"type":"object","description":"Watchlist change-since-last-visit baselines for this page, keyed by domain.","additionalProperties":{"type":"object","required":["atlasRank","queriesPerMonth","capturedAt"],"properties":{"atlasRank":{"type":["integer","null"]},"queriesPerMonth":{"type":["number","null"]},"capturedAt":{"type":"integer"}}}}}},"SavedDomainMembershipListResponse":{"type":"object","additionalProperties":false,"required":["domains","total","limit","planName","monitoringEnabled","nextCursor"],"properties":{"total":{"type":"integer","minimum":0,"description":"Total saved domains across all pages."},"limit":{"type":["integer","null"],"minimum":0,"description":"Effective watchlist allowance; null means no plan cap."},"planName":{"type":"string"},"monitoringEnabled":{"type":"boolean","description":"False on Free or when a saved list exceeds its current allowance. Existing data is preserved."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null when this is the last page."},"domains":{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/SavedDomainMembershipResponse"}}}},"SavedDomainListResponse":{"oneOf":[{"$ref":"#/components/schemas/SavedDomainFullListResponse"},{"$ref":"#/components/schemas/SavedDomainMembershipListResponse"}]},"SavedDomainDeleteResponse":{"type":"object","required":["ok","deleted","domain"],"properties":{"ok":{"type":"boolean"},"deleted":{"type":"boolean"},"domain":{"type":"string","examples":["logo.com"]}}},"CohortMetricsRequest":{"type":"object","additionalProperties":false,"required":["domains"],"properties":{"domains":{"type":"array","minItems":1,"maxItems":250,"items":{"type":"string","examples":["logo.com"]},"description":"Domains to hydrate. Entries are normalized to registrable domains; invalid entries return unresolved results."}}},"CohortMetricsResult":{"type":"object","required":["domain","resolved","atlasRank","rankDeltaPlaces","rankDeltaPct","queriesPerMonth","queriesDeltaPct","spark"],"properties":{"domain":{"type":"string","examples":["logo.com"]},"resolved":{"type":"boolean","description":"False when the upstream could not be reached in budget or the entry was invalid."},"partial":{"type":"boolean","description":"Present and true when one metric family (rank or traffic) is missing for a transient reason (upstream error or request budget). Partial rows are safe to retry; they are never cached."},"atlasRank":{"type":["integer","null"]},"rankDeltaPlaces":{"type":["integer","null"],"description":"Positive means the rank improved over the trailing window."},"rankDeltaPct":{"type":["number","null"],"description":"rankDeltaPlaces as a percentage of the worse (higher) of the two ranks, with the same sign. Bounded at 100 and the same size for a rise or a fall between the same two ranks."},"queriesPerMonth":{"type":["number","null"]},"queriesDeltaPct":{"type":["number","null"]},"spark":{"type":["array","null"],"items":{"type":["integer","null"]},"description":"Up to 12 monthly AtlasRank points, oldest to newest."}}},"CohortMetricsResponse":{"type":"object","required":["results","freshness"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/CohortMetricsResult"}},"freshness":{"type":["string","null"],"examples":["2026-08"]}}},"WatchlistSeenRequest":{"type":"object","additionalProperties":false,"required":["entries"],"properties":{"entries":{"type":"array","maxItems":250,"items":{"type":"object","additionalProperties":false,"required":["domain"],"properties":{"domain":{"type":"string","examples":["logo.com"]},"atlasRank":{"type":["integer","null"]},"queriesPerMonth":{"type":["number","null"]}}},"description":"Snapshot baselines to record for currently saved domains; entries for unsaved domains are skipped."}}},"KeywordEnrichmentRequest":{"type":"object","additionalProperties":false,"properties":{"archive":{"type":"boolean","default":false,"description":"Include historical site context from the Wayback Machine snapshot. Alias: historical."},"historical":{"type":"boolean","default":false,"description":"Canonical name for archive."},"crawl":{"type":"boolean","default":false,"description":"Include Common Crawl site context. Alias: commoncrawl."},"commoncrawl":{"type":"boolean","default":false,"description":"Canonical name for crawl."},"websearch":{"type":"boolean","default":false,"description":"Include web-search-grounded keywords. Degrades to a status message when the search backend is unavailable."},"group_by":{"type":"string","enum":["source"],"description":"Set to source to additionally return keywords_by_source."},"freshness":{"type":"string","enum":["live","tolerant","relaxed"],"default":"tolerant"}}},"KeywordContext":{"type":"object","additionalProperties":false,"required":["status","capture_date","title","description","og_title","og_description","og_type","h1","meta_keywords","schema_type"],"properties":{"status":{"type":"string","enum":["found","not_found","error","skipped"],"description":"Skipped means the lookup exceeded its deadline; it does not establish that a capture is absent."},"capture_date":{"type":["string","null"],"format":"date"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"og_title":{"type":["string","null"]},"og_description":{"type":["string","null"]},"og_type":{"type":["string","null"]},"h1":{"type":["string","null"]},"meta_keywords":{"type":["string","null"]},"schema_type":{"type":["string","null"]},"crawl_index":{"type":["string","null"],"examples":["CC-MAIN-2026-04"]}}},"KeywordHistoricalContext":{"type":"object","additionalProperties":false,"required":["archive_date","title","description","og_title","og_description","og_type","h1","meta_keywords","schema_type","source"],"properties":{"archive_date":{"type":["string","null"],"format":"date"},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"og_title":{"type":["string","null"]},"og_description":{"type":["string","null"]},"og_type":{"type":["string","null"]},"h1":{"type":["string","null"]},"meta_keywords":{"type":["string","null"]},"schema_type":{"type":["string","null"]},"source":{"type":"string","enum":["found","not_found","error","skipped"],"description":"Skipped means the lookup exceeded its deadline; it does not establish that a capture is absent."}}},"KeywordCommonCrawlContext":{"type":"object","additionalProperties":false,"required":["crawl_date","crawl_index","title","description","og_title","og_description","og_type","h1","meta_keywords","schema_type","source"],"properties":{"crawl_date":{"type":["string","null"],"format":"date"},"crawl_index":{"type":["string","null"],"examples":["CC-MAIN-2026-04"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"og_title":{"type":["string","null"]},"og_description":{"type":["string","null"]},"og_type":{"type":["string","null"]},"h1":{"type":["string","null"]},"meta_keywords":{"type":["string","null"]},"schema_type":{"type":["string","null"]},"source":{"type":"string","enum":["found","not_found","error","skipped"],"description":"Skipped means the lookup exceeded its deadline; it does not establish that a capture is absent."}}},"KeywordEntry":{"type":"object","additionalProperties":false,"required":["keyword","score","source"],"properties":{"keyword":{"type":"string","examples":["brand monitoring"]},"score":{"type":["number","null"]},"source":{"type":"string","examples":["ai"],"description":"Which source produced the keyword: ai, word_match, wayback, common_crawl or websearch."}}},"KeywordEnrichmentResponse":{"type":"object","required":["domain","domain_info","keywords","category","subcategory"],"properties":{"@type":{"type":"string","enum":["DomainKeywords"]},"schema_version":{"type":"string","examples":["1"]},"domain":{"type":"string","examples":["logo.com"]},"domain_info":{"type":"object","required":["name","sld","tld"],"properties":{"name":{"type":"string","examples":["logo.com"]},"subdomain":{"type":["string","null"]},"sld":{"type":["string","null"],"examples":["logo"]},"tld":{"type":["string","null"],"examples":["com"]},"root":{"type":["string","null"],"examples":["logo.com"]}}},"keywords":{"type":"array","items":{"$ref":"#/components/schemas/KeywordEntry"}},"keywords_by_source":{"type":["object","null"],"additionalProperties":{"type":"array","items":{"type":"object","properties":{"keyword":{"type":"string"},"score":{"type":["number","null"]}}}},"description":"Present only when group_by=source is requested."},"category":{"type":["string","null"],"examples":["Technology & Computing"]},"subcategory":{"type":["string","null"],"examples":["Software"]},"historical_context":{"$ref":"#/components/schemas/KeywordHistoricalContext"},"commoncrawl_context":{"$ref":"#/components/schemas/KeywordCommonCrawlContext"},"_meta":{"type":"object","properties":{"parser":{"$ref":"#/components/schemas/IdentityParser"},"source":{"type":"string","examples":["keywords_worker"]},"lookup_ms":{"type":"number","minimum":0},"observed_at":{"type":"string","format":"date-time"},"model":{"type":["object","null"],"properties":{"key":{"type":"string","examples":["gpt-oss-20b"]},"id":{"type":"string"},"name":{"type":"string"}}},"fact_recorded_at":{"type":["string","null"],"format":"date-time"},"fact_age_seconds":{"type":["number","null"],"minimum":0},"messages":{"type":"array","description":"Status messages for degraded lookups. A degraded source is reported here, never as a hard error.","items":{"type":"object","properties":{"level":{"type":"string","examples":["warning"]},"code":{"type":"string","examples":["websearch_unavailable"]},"message":{"type":"string"},"domain":{"type":"string"}}}}}}}},"TechnologyDetection":{"type":"object","required":["name","slug","category","confidence"],"properties":{"name":{"type":"string","examples":["Next.js"],"description":"Display name."},"slug":{"type":"string","examples":["nextjs"],"description":"Stable machine identifier. Filter on this, not name."},"category":{"type":"string","enum":["cms","ecommerce","sitebuilder","framework","cdn","server","analytics","tag_manager","payments","chat","error_tracking","marketing"]},"version":{"type":["string","null"],"description":"Null for most detections: only a handful of fingerprints expose a version in the signals collected."},"confidence":{"type":"integer","minimum":1,"maximum":99},"implied":{"type":"boolean","description":"True when inferred from another detection (Next.js implies React) rather than matched directly."},"evidence":{"type":"array","description":"The signals that produced the detection, for auditing it.","items":{"type":"object","required":["signal","id"],"properties":{"signal":{"type":"string","enum":["header","meta_generator","html","script_url","implication"]},"id":{"type":"string","examples":["nextjs.script_url.next"],"description":"Stable {slug}.{kind}.{label} identifier for the rule that fired. Key on this; the pattern behind it is not published."},"key":{"type":"string","examples":["cf-ray"],"description":"Header name. Present only on header signals."},"value":{"type":"string","description":"Bounded, sanitized snippet of the matched substring."}}}}}},"SubdomainsResponse":{"type":"object","required":["domain","subdomains","count"],"description":"Hostnames seen in certificate transparency logs. Certificate transparency records CERTIFICATES, not live hosts: a listed name may not resolve today, and a wildcard certificate (*.example.com) contributes no name at all, so a wildcard-only domain answers with an empty list. An empty list is an answer, not an error.","properties":{"@type":{"type":"string","enum":["Subdomains"]},"domain":{"type":"string","description":"The registrable domain the names belong to. Any hostname is normalized to this root.","examples":["logo.com"]},"subdomains":{"type":"array","items":{"type":"string"},"description":"Lowercase ASCII/punycode hostnames strictly under domain, deduped and sorted. The root itself and wildcard patterns are excluded.","examples":[["api.logo.com","www.logo.com"]]},"count":{"type":"integer","description":"Always equal to subdomains.length.","examples":[2]},"sources":{"type":"array","items":{"type":"string"},"description":"Which source families contributed the names.","examples":[["Atlas Certificates"]]},"truncated":{"type":"boolean","description":"The list was capped. Present the names as the first N rather than as the complete set for the domain."},"_meta":{"type":"object","description":"How complete and how old the observation behind this answer is.","properties":{"parser":{"$ref":"#/components/schemas/IdentityParser"},"source":{"type":"string","examples":["subdomains"]},"partial":{"type":"boolean"},"status":{"type":"string","enum":["no_data","partial"],"description":"no_data when every source answered and found nothing — a real answer. partial when a source failed, fell back to a held copy, or the list was capped. Absent when the observation was clean."},"observed_at":{"type":"string","format":"date-time"},"fact_age_seconds":{"type":"integer"},"stale":{"type":"boolean","description":"Present only when true: the held observation is more than 24 hours old."},"fallback":{"type":"boolean","description":"Present only when true: a held copy was served after a live attempt failed."},"sources":{"type":"array","description":"Per-source detail. Diagnostic only; not a basis for UI logic beyond the stale and partial indicators.","items":{"type":"object","properties":{"source":{"type":"string"},"status":{"type":"string","enum":["ok","no_data","error"]},"origin":{"type":"string","enum":["live","fact"]},"count":{"type":"integer"},"truncated":{"type":"boolean"},"observed_at":{"type":"string","format":"date-time"},"fact_age_seconds":{"type":"integer"}}}}}}}},"TechnologyResponse":{"type":"object","required":["domain","technologies","slugs","crawl"],"properties":{"@type":{"type":"string","enum":["Technology"]},"schema_version":{"type":"string","examples":["1"]},"domain":{"type":"string","examples":["logo.com"]},"domain_info":{"type":"object","properties":{"name":{"type":"string","examples":["logo.com"]},"subdomain":{"type":["string","null"]},"sld":{"type":["string","null"],"examples":["logo"]},"tld":{"type":["string","null"],"examples":["com"]}}},"technologies":{"type":"array","description":"Ordered confidence descending, then slug ascending, so an unchanged site diffs to nothing.","items":{"$ref":"#/components/schemas/TechnologyDetection"}},"technologies_by_category":{"type":["object","null"],"additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/TechnologyDetection"}},"description":"Present only when group_by=category is requested."},"slugs":{"type":"array","items":{"type":"string"},"description":"Flat, sorted, deduped projection of technologies[].slug. The field to filter a large domain set on."},"page":{"type":["object","null"],"description":"What the crawled page declares about itself. Null, not {}, on any crawl that did not complete.","properties":{"title":{"type":["string","null"]},"description":{"type":["string","null"]},"language":{"type":["string","null"],"examples":["en-US"]},"canonical":{"type":["string","null"]},"favicon":{"type":["string","null"]},"og":{"type":["object","null"],"properties":{"title":{"type":["string","null"]},"description":{"type":["string","null"]},"site_name":{"type":["string","null"]},"type":{"type":["string","null"]},"image":{"type":["string","null"]}}}}},"security":{"type":["object","null"],"description":"Which response security headers the site sets, reported and not graded. Null, not {}, on any crawl that did not complete.","properties":{"hsts":{"type":"boolean"},"hsts_max_age":{"type":["integer","null"]},"hsts_include_subdomains":{"type":"boolean"},"hsts_preload":{"type":"boolean"},"csp":{"type":"boolean"},"csp_report_only":{"type":"boolean","description":"A report-only policy enforces nothing and does not count as csp."},"frame_options":{"type":["string","null"],"examples":["SAMEORIGIN"]},"content_type_options":{"type":["string","null"],"examples":["nosniff"]},"referrer_policy":{"type":["string","null"]},"permissions_policy":{"type":["boolean","string","null"]},"cross_origin_opener_policy":{"type":["string","null"]},"missing":{"type":"array","items":{"type":"string"}}}},"crawl":{"type":"object","required":["status"],"description":"Read this before technologies. An empty list on status ok means nothing fingerprinted is running; on any other status it means the page was never read.","properties":{"status":{"type":"string","enum":["ok","timeout","fetch_error","http_error","blocked","unsupported_content"]},"http_status":{"type":["integer","null"]},"final_url":{"type":["string","null"]},"redirects":{"type":["integer","null"],"minimum":0},"truncated":{"type":"boolean"}}},"observed_at":{"type":["string","null"],"format":"date-time","description":"One timestamp for the whole result: every detection came from the same crawl."},"_meta":{"type":"object","properties":{"parser":{"$ref":"#/components/schemas/IdentityParser"},"source":{"type":"string","examples":["tech_worker"]},"lookup_ms":{"type":"number","minimum":0},"observed_at":{"type":"string","format":"date-time"},"fingerprints":{"type":"object","description":"Generation of the fingerprint table that produced the result.","properties":{"version":{"type":"string","examples":["2"]},"count":{"type":"integer","minimum":0}}},"crawl":{"type":"object","description":"How the answer was produced, wanted the day a detection looks wrong and never otherwise.","properties":{"requested_url":{"type":"string"},"content_type":{"type":["string","null"]},"bytes_scanned":{"type":["integer","null"],"minimum":0},"elapsed_ms":{"type":["number","null"],"minimum":0}}},"fact_recorded_at":{"type":["string","null"],"format":"date-time"},"fact_age_seconds":{"type":["number","null"],"minimum":0},"messages":{"type":"array","items":{"type":"object","properties":{"level":{"type":"string","examples":["warning"]},"code":{"type":"string"},"message":{"type":"string"},"domain":{"type":"string"}}}}}}}},"HealthResponse":{"type":"object","required":["status","app","dataSourceConfigured","database"],"properties":{"status":{"type":"string","enum":["ok"]},"app":{"type":"string","examples":["Domain Atlas"]},"dataSourceConfigured":{"type":"boolean"},"database":{"type":"object","required":["configured","schemaReady","missingTables","missingIndexes","requiredTableCount","requiredIndexCount"],"properties":{"configured":{"type":"boolean"},"schemaReady":{"type":"boolean"},"missingTables":{"type":"array","items":{"type":"string"}},"missingIndexes":{"type":"array","items":{"type":"string"}},"requiredTableCount":{"type":"integer","minimum":0},"requiredIndexCount":{"type":"integer","minimum":0}}}}},"SessionResponse":{"type":"object","required":["authenticated","account","providers"],"additionalProperties":false,"properties":{"authenticated":{"type":"boolean"},"account":{"oneOf":[{"type":"null"},{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["session","api_key","local"]},"roles":{"type":"array","items":{"type":"string","enum":["admin"]},"description":"Public role labels for this account."},"isAdmin":{"type":"boolean"},"email":{"type":"string","format":"email","description":"Display email for interactive sessions when available. Storage identifiers are never returned."}}}]},"providers":{"type":"object","required":["google"],"additionalProperties":false,"properties":{"google":{"type":"boolean"}}},"roles":{"type":"array","items":{"type":"string","enum":["admin"]}},"isAdmin":{"type":"boolean"},"plan":{"description":"The plan whose entitlements apply to the caller (the organization's plan when they belong to one). Null when signed out or when account storage is unavailable.","oneOf":[{"type":"null"},{"type":"object","required":["id","name","watchedDomains","subscribed","status","currentPeriodEnd","credits","organization"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Plan id: free, pro, enterprise, or internal."},"name":{"type":"string"},"watchedDomains":{"type":["integer","null"],"minimum":0,"description":"Watchlist allowance: 0 means the plan has no watchlist, null means no cap."},"subscribed":{"type":"boolean","description":"True when a live Stripe subscription (active, trialing, or past due) pays for the plan, in which case checkout answers 409 already_subscribed and the plan is managed from the account page. False on the reverse trial and on Free."},"status":{"type":"string","enum":["active","trialing","past_due","canceled","none"],"description":"Billing status of whoever owns the plan: the organization's for a member, otherwise the caller's own."},"currentPeriodEnd":{"type":["integer","null"],"minimum":0,"description":"When the plan's current period ends, in epoch milliseconds: the trial's end while status is trialing, otherwise the subscription period's end (its renewal while active, when it ended once canceled). Null when there has been no period (Free without a subscription, or an internal organization)."},"credits":{"type":"object","required":["used","usedByYou","limit","remaining","resetsAt"],"additionalProperties":false,"description":"This month's balance for the plan's scope, the same figures the X-Credits-* headers report on metered responses. A lookup costs 10 credits.","properties":{"used":{"type":"integer","minimum":0,"description":"Credits the whole scope has spent this month."},"usedByYou":{"type":"integer","minimum":0,"description":"The caller's own share of used: what an organization member spent themselves; equal to used on a personal plan."},"limit":{"type":["integer","null"],"minimum":0,"description":"The monthly allowance; null when the plan has no monthly ceiling."},"remaining":{"type":["integer","null"],"minimum":0,"description":"Credits left this month; null when the plan has no monthly ceiling."},"resetsAt":{"type":"string","format":"date-time","description":"When the allowance refills: the first instant of the next UTC month."}}},"organization":{"description":"The organization whose plan and credits apply, by name only; null on a personal plan.","oneOf":[{"type":"null"},{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}]}}}]},"billingConfigured":{"type":"boolean","description":"Whether self-serve checkout is available on this deployment."}}},"ReadinessResponse":{"type":"object","required":["status"],"description":"Non-admin callers receive only status (ready or not_ready). Admin sessions also receive checks and summary.","properties":{"status":{"type":"string","enum":["ready","degraded","not_ready"]},"checks":{"type":"array","items":{"type":"object","required":["key","label","message","required","status"],"properties":{"key":{"type":"string"},"label":{"type":"string"},"message":{"type":"string"},"required":{"type":"boolean"},"status":{"type":"string","enum":["ready","warning","missing"]},"details":{"type":"object","additionalProperties":true}}}},"summary":{"type":"object","required":["ready","warning","missing","requiredMissing"],"properties":{"ready":{"type":"integer","minimum":0},"warning":{"type":"integer","minimum":0},"missing":{"type":"integer","minimum":0},"requiredMissing":{"type":"integer","minimum":0}}}}},"SourceCoverageItem":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"Stable capability identifier.","examples":["keywords"]},"capability":{"type":"string","description":"Human-readable capability or data surface being tracked.","examples":["AtlasRank time series"]},"atlasEndpoint":{"type":"string","description":"Domain Atlas endpoint associated with the capability.","examples":["/api/v1/domains/:domain/rank?sources=atlas_rank&months=12"]},"upstreamEndpoint":{"type":"string","description":"Upstream data-service endpoint used now or required for this capability.","examples":["/api/v1/domain/:domain/keywords"]},"requiredResponse":{"type":"string","description":"Minimum response shape Domain Atlas needs from the domain data service."},"purpose":{"type":"string","description":"Product surface enabled by the capability."},"status":{"type":"string","enum":["available","required","scaling_gap"],"description":"Current upstream capability status."}}},"SourceCoverageResponse":{"type":"object","required":["primarySource","atlasApi","neededUpstream"],"properties":{"primarySource":{"type":"object","required":["id","label","policy"],"properties":{"id":{"type":"string","enum":["domain-data"]},"label":{"type":"string","enum":["Domain data service"]},"policy":{"type":"string"}}},"atlasApi":{"type":"array","description":"Capabilities already available from the domain data service.","items":{"$ref":"#/components/schemas/SourceCoverageItem"}},"neededUpstream":{"type":"array","description":"Capabilities the domain data service must add or scale before Domain Atlas can populate those surfaces.","items":{"$ref":"#/components/schemas/SourceCoverageItem"}}}},"DataEndpointMapSummary":{"type":"object","required":["total","domain-data","account_db","atlas_metadata"],"additionalProperties":false,"properties":{"total":{"type":"integer","minimum":0},"domain-data":{"type":"integer","minimum":0},"account_db":{"type":"integer","minimum":0},"atlas_metadata":{"type":"integer","minimum":0}}},"DataEndpointMapItem":{"type":"object","additionalProperties":false,"required":["method","atlasEndpoint","source","sourceLabel","upstream","status","docsPath"],"properties":{"method":{"type":"string","enum":["GET","HEAD","POST","DELETE"],"description":"HTTP method used by the Domain Atlas endpoint."},"atlasEndpoint":{"type":"string","description":"Public Domain Atlas endpoint path.","examples":["/api/v1/domains/:domain/overview"]},"source":{"type":"string","enum":["domain-data","account_db","atlas_metadata"],"description":"Source family used to resolve the endpoint."},"sourceLabel":{"type":"string","description":"Human-readable source family label.","examples":["Domain data service"]},"upstream":{"type":"string","description":"Upstream data-service endpoint or local account system behind the endpoint.","examples":["/api/v1/domain/:domain/dns"]},"status":{"type":"string","enum":["covered","requires_upstream","local","not_data"],"description":"Migration or operational status for the endpoint."},"docsPath":{"type":"string","description":"Console-relative docs URL that lands on this endpoint's operation.","examples":["/docs#tag/domain-profile/GET/api/v1/domains/{domain}/overview"]},"notes":{"type":"string","description":"Optional operator-facing notes about the endpoint."}}},"DataEndpointMapResponse":{"type":"object","additionalProperties":false,"required":["updatedAt","summary","endpoints"],"properties":{"updatedAt":{"type":"string","format":"date-time","description":"Stable metadata update timestamp.","examples":["1970-01-01T00:00:00.000Z"]},"summary":{"$ref":"#/components/schemas/DataEndpointMapSummary"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DataEndpointMapItem"}}}},"IdentityParser":{"type":"object","description":"The parser that computed this domain's identity (the registrable domain the path normalizes to), on every successful per-domain response as _meta.parser: the library, its exact release, and the SHA-256 of the public suffix list it bundles. Two answers with the same values were normalized by the same rules.","required":["name","version","psl"],"properties":{"name":{"type":"string","examples":["tldts"]},"version":{"type":"string","examples":["7.4.16"]},"psl":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","examples":["sha256:3a8f59442b59affb612476aa5bd5e5cc5b787663a499a3d06e8262911ffc52a4"]}}},"ApiError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string","description":"Stable snake_case error code that is safe for client branching.","examples":["rate_limited","invalid_domain"]},"reason":{"type":"string","description":"Stable snake_case sub-code when the code has more than one cause, safe for client branching. invalid_domain: empty, email, url_credentials, invalid_characters, invalid_idn, too_long, public_suffix (a name such as co.uk or gov.uk is a public suffix, not a registrable domain, so it has no profile and is not charged) or invalid_domain. invalid_tld: multi_label or invalid_tld.","examples":["public_suffix","multi_label"]},"message":{"type":"string","description":"Public-safe human-readable error message.","examples":["The request was rate limited."]},"requestId":{"type":"string","description":"Request identifier mirrored from the x-request-id response header for support, logs, and retries.","examples":["req_01j4z4s6q3q2x9m8n7p6"]},"retry_after_seconds":{"type":["integer","null"],"minimum":1,"description":"Retry delay in seconds when the body carries retry guidance. Also check the Retry-After response header.","examples":[60]}}}}}}