{"openapi":"3.1.0","info":{"title":"Kosto API","version":"1.0.0","description":"Endpoints for domain authority score, referring domains, bulk lookup and comparison."},"servers":[{"url":"https://getkosto.com"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"paths":{"/api/v1/domain":{"get":{"operationId":"getDomain","summary":"Score and metrics of a single domain","tags":["v1"],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"},"description":"Domain name or URL, e.g. example.com"}],"responses":{"200":{"description":"The domain’s score. For domains not in the graph, found=false is returned.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"description":"Invalid input (missing_parameter, invalid_domain, invalid_parameter, invalid_request, too_many_domains).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API key missing or invalid (missing_api_key, invalid_api_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has been revoked, is not linked to an account, or the account is suspended; or the Host / Sec-Fetch-Site header was rejected (key_revoked, key_unowned, account_suspended, forbidden_host, cross_site_forbidden).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The per-minute rate limit (rate_limited) or the plan quota (quota_exceeded) has been exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-Quota-Meter":{"schema":{"type":"string"},"description":"quota_exceeded: the meter whose quota is used up."},"X-Quota-Limit":{"schema":{"type":"integer"},"description":"quota_exceeded: the period limit of that meter."},"X-Quota-Remaining":{"schema":{"type":"integer"},"description":"quota_exceeded: remaining allowance."},"X-Quota-Reset":{"schema":{"type":"integer"},"description":"quota_exceeded: time at which the quota renews (Unix seconds)."}}}}}},"/api/v1/backlinks":{"get":{"operationId":"getBacklinks","summary":"Referring domains","tags":["v1"],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"},"description":"Domain name or URL."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"description":"Maximum number of rows to return."},{"name":"min_score","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":100,"default":0},"description":"Only referring domains whose score is at least this value. The filter is applied within the top 1000 ranked referring domains."}],"responses":{"200":{"description":"Referring domains, in descending order of score.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Backlinks"}}}},"400":{"description":"Invalid input (missing_parameter, invalid_domain, invalid_parameter, invalid_request, too_many_domains).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API key missing or invalid (missing_api_key, invalid_api_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has been revoked, is not linked to an account, or the account is suspended; or the Host / Sec-Fetch-Site header was rejected (key_revoked, key_unowned, account_suspended, forbidden_host, cross_site_forbidden).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The per-minute rate limit (rate_limited) or the plan quota (quota_exceeded) has been exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-Quota-Meter":{"schema":{"type":"string"},"description":"quota_exceeded: the meter whose quota is used up."},"X-Quota-Limit":{"schema":{"type":"integer"},"description":"quota_exceeded: the period limit of that meter."},"X-Quota-Remaining":{"schema":{"type":"integer"},"description":"quota_exceeded: remaining allowance."},"X-Quota-Reset":{"schema":{"type":"integer"},"description":"quota_exceeded: time at which the quota renews (Unix seconds)."}}},"503":{"description":"The link graph is not ready (graph_unavailable); see the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/spam":{"get":{"operationId":"getSpam","summary":"Spam / index scan","tags":["v1"],"description":"Examines the domain’s pages in the web archive and in the crawl index; returns findings about spam use (gambling, adult, pharma, replica, hacked content, etc.) and a risk score from 0 to 100. The first query can take up to 25 seconds; the result is cached for 24 hours.","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"},"description":"Domain name or URL."},{"name":"fresh","in":"query","required":false,"schema":{"type":"integer","enum":[0,1],"default":0},"description":"If 1, the cache is skipped and the scan is run again."}],"responses":{"200":{"description":"Scan result. If one of the sources does not respond, a partial result is returned with the data available; the \"error\" field of that source is filled in.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpamAudit"}}}},"400":{"description":"Invalid input (missing_parameter, invalid_domain, invalid_parameter, invalid_request, too_many_domains).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API key missing or invalid (missing_api_key, invalid_api_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has been revoked, is not linked to an account, or the account is suspended; or the Host / Sec-Fetch-Site header was rejected (key_revoked, key_unowned, account_suspended, forbidden_host, cross_site_forbidden).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The per-minute rate limit (rate_limited) or the plan quota (quota_exceeded) has been exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-Quota-Meter":{"schema":{"type":"string"},"description":"quota_exceeded: the meter whose quota is used up."},"X-Quota-Limit":{"schema":{"type":"integer"},"description":"quota_exceeded: the period limit of that meter."},"X-Quota-Remaining":{"schema":{"type":"integer"},"description":"quota_exceeded: remaining allowance."},"X-Quota-Reset":{"schema":{"type":"integer"},"description":"quota_exceeded: time at which the quota renews (Unix seconds)."}}}}}},"/api/v1/bulk":{"post":{"operationId":"postBulk","summary":"Bulk score lookup","tags":["v1"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domains"],"properties":{"domains":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"}}}}}}},"responses":{"200":{"description":"One row per distinct domain; different spellings of the same site collapse into a single row.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bulk"}}}},"400":{"description":"Invalid input (missing_parameter, invalid_domain, invalid_parameter, invalid_request, too_many_domains).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API key missing or invalid (missing_api_key, invalid_api_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has been revoked, is not linked to an account, or the account is suspended; or the Host / Sec-Fetch-Site header was rejected (key_revoked, key_unowned, account_suspended, forbidden_host, cross_site_forbidden).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body exceeds the 1 MB limit (payload_too_large).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The per-minute rate limit (rate_limited) or the plan quota (quota_exceeded) has been exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-Quota-Meter":{"schema":{"type":"string"},"description":"quota_exceeded: the meter whose quota is used up."},"X-Quota-Limit":{"schema":{"type":"integer"},"description":"quota_exceeded: the period limit of that meter."},"X-Quota-Remaining":{"schema":{"type":"integer"},"description":"quota_exceeded: remaining allowance."},"X-Quota-Reset":{"schema":{"type":"integer"},"description":"quota_exceeded: time at which the quota renews (Unix seconds)."}}}}}},"/api/v1/compare":{"get":{"operationId":"getCompare","summary":"Compare domains side by side","tags":["v1"],"parameters":[{"name":"domains","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated list of 2–10 domain names, e.g. a.com,b.com"}],"responses":{"200":{"description":"The metrics of each domain, in the order submitted.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Compare"}}}},"400":{"description":"Invalid input (missing_parameter, invalid_domain, invalid_parameter, invalid_request, too_many_domains).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API key missing or invalid (missing_api_key, invalid_api_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has been revoked, is not linked to an account, or the account is suspended; or the Host / Sec-Fetch-Site header was rejected (key_revoked, key_unowned, account_suspended, forbidden_host, cross_site_forbidden).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The per-minute rate limit (rate_limited) or the plan quota (quota_exceeded) has been exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-Quota-Meter":{"schema":{"type":"string"},"description":"quota_exceeded: the meter whose quota is used up."},"X-Quota-Limit":{"schema":{"type":"integer"},"description":"quota_exceeded: the period limit of that meter."},"X-Quota-Remaining":{"schema":{"type":"integer"},"description":"quota_exceeded: remaining allowance."},"X-Quota-Reset":{"schema":{"type":"integer"},"description":"quota_exceeded: time at which the quota renews (Unix seconds)."}}}}}},"/api/v1/usage":{"get":{"operationId":"getUsage","summary":"Usage and rate-limit status of the key","tags":["v1"],"responses":{"200":{"description":"The counters of the key that made the request.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"401":{"description":"API key missing or invalid (missing_api_key, invalid_api_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has been revoked, is not linked to an account, or the account is suspended; or the Host / Sec-Fetch-Site header was rejected (key_revoked, key_unowned, account_suspended, forbidden_host, cross_site_forbidden).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The per-minute rate limit (rate_limited) or the plan quota (quota_exceeded) has been exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."},"X-Quota-Meter":{"schema":{"type":"string"},"description":"quota_exceeded: the meter whose quota is used up."},"X-Quota-Limit":{"schema":{"type":"integer"},"description":"quota_exceeded: the period limit of that meter."},"X-Quota-Remaining":{"schema":{"type":"integer"},"description":"quota_exceeded: remaining allowance."},"X-Quota-Reset":{"schema":{"type":"integer"},"description":"quota_exceeded: time at which the quota renews (Unix seconds)."}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenApi","summary":"This document (OpenAPI 3.1)","tags":["v1"],"security":[],"responses":{"200":{"description":"The OpenAPI document.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Number of requests allowed per window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Number of requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Time at which the window resets (Unix seconds)."}},"content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Authorization: Bearer op_…"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"Components":{"type":"object","description":"The components that make up the score, 0–100.","required":["centrality","pagerank","popularity"],"properties":{"centrality":{"type":"integer","minimum":0,"maximum":100},"pagerank":{"type":"integer","minimum":0,"maximum":100},"popularity":{"type":"integer","minimum":0,"maximum":100}}},"Domain":{"type":"object","required":["domain","found","authority_score","score_source","link_rank","pagerank_rank","popularity_rank","referring_domains","subdomains","components"],"properties":{"domain":{"type":"string","description":"Registrable domain name (subdomains are reduced to the parent domain)."},"found":{"type":"boolean","description":"Whether the domain is in the link graph."},"authority_score":{"type":"integer","minimum":0,"maximum":100,"description":"Authority score."},"score_source":{"type":"string","enum":["standard","calibrated","data"],"description":"Source of the score. standard: standard calculation (approximate score). calibrated: approximate score passed through the calibration curve. data: score computed from verified search data. New values may be added."},"score_low":{"type":["integer","null"],"description":"Optional. Lower bound of the expected range of the score (0–100); null when no range is reported. A score computed from measured data also has a range equal to the model’s measured error margin."},"score_high":{"type":["integer","null"],"description":"Optional. Upper bound of the expected range of the score (0–100); null when no range is reported. A score computed from measured data also has a range equal to the model’s measured error margin."},"model_version":{"type":"string","description":"Optional. Version of the model that produced the score; the score does not change with the same version and the same data."},"link_rank":{"type":["integer","null"],"description":"Rank by centrality (harmonic centrality) in the link graph; 1 is best."},"pagerank_rank":{"type":["integer","null"],"description":"PageRank rank; 1 is best."},"popularity_rank":{"type":["integer","null"],"description":"Rank in the popularity index (top 1 million); null if not listed."},"referring_domains":{"type":["integer","null"],"description":"Number of distinct domains linking to this domain; null if it is not in the graph or the graph is not ready."},"subdomains":{"type":["integer","null"],"description":"Number of hosts seen for this domain in the graph."},"components":{"$ref":"#/components/schemas/Components"}}},"BacklinkRow":{"type":"object","required":["domain","authority_score","link_rank","popularity_rank","subdomains"],"properties":{"domain":{"type":"string","description":"Registrable domain name (subdomains are reduced to the parent domain)."},"authority_score":{"type":"integer","minimum":0,"maximum":100,"description":"Authority score."},"score_source":{"type":"string","enum":["standard","calibrated","data"],"description":"Optional. Source of the score. standard: standard calculation (approximate score). calibrated: approximate score passed through the calibration curve. data: score computed from verified search data. New values may be added."},"link_rank":{"type":["integer","null"],"description":"Rank by centrality (harmonic centrality) in the link graph; 1 is best."},"popularity_rank":{"type":["integer","null"],"description":"Rank in the popularity index (top 1 million); null if not listed."},"subdomains":{"type":["integer","null"],"description":"Number of hosts seen for this domain in the graph."}}},"Backlinks":{"type":"object","required":["domain","found","limit","min_score","total","returned","results"],"properties":{"domain":{"type":"string","description":"Registrable domain name (subdomains are reduced to the parent domain)."},"found":{"type":"boolean","description":"Whether the domain is in the link graph."},"limit":{"type":"integer"},"min_score":{"type":"integer"},"total":{"type":"integer","description":"Total number of distinct domains linking to the domain."},"returned":{"type":"integer","description":"Number of rows in this response."},"results":{"type":"array","items":{"$ref":"#/components/schemas/BacklinkRow"}}}},"BulkRow":{"type":"object","required":["input","valid","domain","found","authority_score","score_source","link_rank","pagerank_rank","popularity_rank","subdomains","components"],"properties":{"input":{"type":"string","description":"The submitted value (up to 300 characters)."},"valid":{"type":"boolean","description":"Whether the input is a valid domain name; if not, the other fields are null."},"domain":{"type":["string","null"],"description":"Registrable domain name (subdomains are reduced to the parent domain)."},"found":{"type":"boolean","description":"Whether the domain is in the link graph."},"authority_score":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"Authority score."},"score_source":{"type":["string","null"],"enum":["standard","calibrated","data",null],"description":"Source of the score. standard: standard calculation (approximate score). calibrated: approximate score passed through the calibration curve. data: score computed from verified search data. New values may be added."},"score_low":{"type":["integer","null"],"description":"Optional. Lower bound of the expected range of the score (0–100); null when no range is reported. A score computed from measured data also has a range equal to the model’s measured error margin."},"score_high":{"type":["integer","null"],"description":"Optional. Upper bound of the expected range of the score (0–100); null when no range is reported. A score computed from measured data also has a range equal to the model’s measured error margin."},"model_version":{"type":["string","null"],"description":"Optional. Version of the model that produced the score; the score does not change with the same version and the same data."},"link_rank":{"type":["integer","null"],"description":"Rank by centrality (harmonic centrality) in the link graph; 1 is best."},"pagerank_rank":{"type":["integer","null"],"description":"PageRank rank; 1 is best."},"popularity_rank":{"type":["integer","null"],"description":"Rank in the popularity index (top 1 million); null if not listed."},"subdomains":{"type":["integer","null"],"description":"Number of hosts seen for this domain in the graph."},"components":{"anyOf":[{"$ref":"#/components/schemas/Components"},{"type":"null"}]}}},"Bulk":{"type":"object","required":["total","found","results"],"properties":{"total":{"type":"integer","description":"Number of rows (after duplicates are removed)."},"found":{"type":"integer","description":"Number of domains found in the graph."},"results":{"type":"array","items":{"$ref":"#/components/schemas/BulkRow"}}}},"Compare":{"type":"object","required":["total","leader","results"],"properties":{"total":{"type":"integer"},"leader":{"type":"string","description":"The domain with the highest score."},"results":{"type":"array","minItems":2,"maxItems":10,"items":{"$ref":"#/components/schemas/Domain"}}}},"Usage":{"type":"object","required":["key","request_count","rate_limit"],"properties":{"key":{"type":"object","required":["id","name","prefix","created_at","last_used_at"],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"prefix":{"type":"string","description":"The first 8 characters of the key."},"created_at":{"type":"string","format":"date-time"},"last_used_at":{"type":"string","format":"date-time"}}},"request_count":{"type":"integer","description":"Total accepted requests made with this key (including this one)."},"rate_limit":{"type":"object","required":["limit","remaining","window_seconds","reset_at"],"properties":{"limit":{"type":"integer"},"remaining":{"type":"integer"},"window_seconds":{"type":"integer"},"reset_at":{"type":"string","format":"date-time"}}}}},"SpamAudit":{"type":"object","required":["domain","risk","verdict","checked_at","cached","sources","categories","timeline","scripts","signals","samples"],"properties":{"domain":{"type":"string","description":"Registrable domain name (subdomains are reduced to the parent domain)."},"risk":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score: the sum of the \"points\" values of the categories and signals (at most 100)."},"verdict":{"type":"string","enum":["clean","suspicious","risky","spam"],"description":"Fixed English identifiers: clean (below 15), suspicious (15–39), risky (40–69), spam (70+)."},"checked_at":{"type":"string","format":"date-time"},"cached":{"type":"boolean","description":"Whether the result came from the cache."},"mode":{"type":"string","enum":["full","light"],"description":"full: page contents and the live site were also examined; light: only URL lists and the domain name."},"confidence":{"type":"string","enum":["normal","low"],"description":"low: quick (light) scan; because it only looks at URL lists and the name, it is not treated as equivalent to a full audit. normal: full audit."},"pages_fetched":{"type":"integer","description":"Number of archive pages whose content was read."},"duration_ms":{"type":"integer"},"sources":{"type":"object","required":["archive","crawl","live"],"properties":{"archive":{"type":"object","description":"Web archive.","required":["ok","urls","first_seen","last_seen","error"],"properties":{"ok":{"type":"boolean"},"urls":{"type":"integer"},"first_seen":{"type":["string","null"],"description":"Date of the first record (YYYY-MM-DD)."},"last_seen":{"type":["string","null"],"description":"Date of the last record (YYYY-MM-DD)."},"error":{"type":["string","null"],"description":"Explanation if the source could not be read in full."}}},"crawl":{"type":"object","description":"Tarama endeksi.","required":["ok","urls","crawl","error"],"properties":{"ok":{"type":"boolean"},"urls":{"type":"integer"},"crawl":{"type":["string","null"],"description":"Identifier of the crawl used."},"error":{"type":["string","null"],"description":"Explanation if the source could not be read."}}},"index":{"type":"object","description":"Search engine index: the list of indexed pages for the domain (up to 3 queries; not queried in a quick scan). If this source is temporarily unavailable, ok=false and the audit continues with the other sources.","required":["ok","results","estimated_total","queries","error"],"properties":{"ok":{"type":"boolean"},"results":{"type":"integer","description":"Number of indexed results examined."},"estimated_total":{"type":["integer","null"],"description":"Estimated number of indexed pages (null if the source did not provide it)."},"queries":{"type":"integer","minimum":0,"maximum":3,"description":"Number of queries that received a response."},"error":{"type":["string","null"],"description":"Neutral explanation if the source was unavailable."}}},"live":{"type":"object","description":"Live home page.","required":["ok","status","title","lang","error"],"properties":{"ok":{"type":"boolean"},"status":{"type":["integer","null"],"description":"HTTP durum kodu."},"title":{"type":["string","null"],"description":"Page title."},"lang":{"type":["string","null"],"description":"The <html lang> value."},"error":{"type":["string","null"],"description":"Explanation if it could not be read."}}}}},"categories":{"type":"array","description":"Only categories with at least one example; sorted by severity first, then by number of examples.","items":{"type":"object","required":["id","label","severity","hits","share","examples"],"properties":{"id":{"type":"string","enum":["gambling","adult","pharma","counterfeit","finance_scam","essay","hacked_cjk","piracy","seo_spam","malware"]},"label":{"type":"string"},"severity":{"type":"string","enum":["high","medium","low"]},"hits":{"type":"integer","description":"Number of examples that fall into this category."},"share":{"type":"number","minimum":0,"maximum":1,"description":"Weighted share (pages that were read and home pages count more than bare URLs)."},"points":{"type":"integer","description":"Contribution of this category to the risk score."},"examples":{"type":"array","maxItems":8,"items":{"type":"object","required":["url","title","source","date","matched"],"properties":{"url":{"type":"string"},"title":{"type":["string","null"],"description":"Page title (if it was read)."},"source":{"type":"string","enum":["archive","crawl","live","index"]},"date":{"type":["string","null"],"description":"YYYY-MM-DD"},"matched":{"type":"array","items":{"type":"string"},"description":"Matched terms."}}}}}}},"timeline":{"type":"array","description":"Number of samples examined and flagged per year (ascending order).","items":{"type":"object","required":["year","total","flagged"],"properties":{"year":{"type":"integer"},"total":{"type":"integer"},"flagged":{"type":"integer"}}}},"scripts":{"type":"array","description":"Distribution of title/text samples by writing system.","items":{"type":"object","required":["script","share","count"],"properties":{"script":{"type":"string"},"share":{"type":"number","minimum":0,"maximum":1},"count":{"type":"integer"}}}},"signals":{"type":"array","description":"Structural findings; bad ones first.","items":{"type":"object","required":["id","label","level","detail"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"level":{"type":"string","enum":["ok","warn","bad"]},"detail":{"type":"string"},"points":{"type":"integer","description":"Contribution of this signal to the risk score."}}}},"samples":{"type":"array","maxItems":200,"description":"Samples examined; flagged ones first.","items":{"type":"object","required":["url","title","date","source","flags"],"properties":{"url":{"type":"string"},"title":{"type":["string","null"],"description":"Page title (if it was read)."},"date":{"type":["string","null"],"description":"YYYY-MM-DD"},"source":{"type":"string","enum":["archive","crawl","live","index"]},"flags":{"type":"array","items":{"type":"string"},"description":"Kategori kimlikleri."}}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Constant, machine-readable code."},"message":{"type":"string","description":"Human-readable description in the request language."}}}}}}}}