{"openapi":"3.1.0","info":{"title":"PostureIQ Public Data API","version":"1.0.0","description":"Public, read-only stored Australian domain posture data. No authentication required. Different filters combine with AND. A null score is unknown/incomplete, not zero. Retained complete scores have their own timestamps. Results do not trigger scans. Query limits are approximate, location-based and shared with MCP tool calls: 120 per minute per client IP. Measurements are retained for 12 months; detailed evidence for 90 days. No bulk export is provided."},"servers":[{"url":"https://postureiq.emdashcyber.com"}],"externalDocs":{"url":"https://postureiq.emdashcyber.com/developers"},"paths":{"/api/v1/domains":{"get":{"operationId":"searchDomains","summary":"Search and filter tracked domains","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":253},"description":"Domain substring search."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1},"description":"Page number; clamped to the available page count."},{"name":"pageSize","in":"query","schema":{"type":"integer","enum":[25,50,100],"default":25},"description":"Results per page."},{"name":"sort","in":"query","schema":{"type":"string","enum":["name","score","lastScanned","discovered","trancoRank"],"default":"trancoRank"},"description":"Unavailable values sort last; domain name is the stable tie-breaker."},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"description":"Sort direction."},{"name":"scanState","in":"query","schema":{"type":"string","enum":["all","queued","scanning","complete","incomplete","failed"],"default":"all"},"description":"Job/measurement state."},{"name":"freshness","in":"query","schema":{"type":"string","enum":["all","fresh","stale","never"],"default":"all"},"description":"Fresh means measured within seven days."},{"name":"namespace","in":"query","schema":{"type":"string","enum":["all","direct-au","com.au","net.au","org.au","gov.au","edu.au","asn.au","id.au","other"]},"description":".au namespace."},{"name":"source","in":"query","schema":{"type":"string","enum":["all","tranco","commoncrawl","dmarc-au-registry","submission","admin-import"]},"description":"First added via this source; no per-domain provenance records are exposed."},{"name":"minScore","in":"query","schema":{"type":"number","minimum":0,"maximum":100},"description":"Minimum retained comparable score."},{"name":"maxScore","in":"query","schema":{"type":"number","minimum":0,"maximum":100},"description":"Maximum retained comparable score."},{"name":"certificate","in":"query","schema":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"description":"Check status in the latest measurement; applies to the apex check."},{"name":"redirect","in":"query","schema":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"description":"Check status in the latest measurement; applies to the apex check."},{"name":"spf","in":"query","schema":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"description":"Check status in the latest measurement; applies to the apex check."},{"name":"dmarc","in":"query","schema":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"description":"Check status in the latest measurement; applies to the apex check."},{"name":"hsts","in":"query","schema":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"description":"Check status in the latest measurement; applies to the apex check."},{"name":"dnssec","in":"query","schema":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"description":"Check status in the latest measurement; applies to the apex check."},{"name":"filter","in":"query","schema":{"type":"string","enum":["all","strong","attention","incomplete"]},"description":"Legacy compatibility alias. Prefer explicit filters."}],"security":[],"responses":{"200":{"description":"Stored public data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Directory"}}}},"400":{"description":"Invalid request","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Domain or measurement not available","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; retry after 60 seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/domains/{domain}":{"get":{"operationId":"getDomainReport","summary":"Latest public domain report","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain name. IDNA and an optional www prefix are normalised. Only publicly admitted domains are returned."}],"security":[],"responses":{"200":{"description":"Stored public data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Invalid request","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Domain or measurement not available","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; retry after 60 seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/domains/{domain}/history":{"get":{"operationId":"getDomainHistory","summary":"Paginated measurement history, newest first","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain name. IDNA and an optional www prefix are normalised. Only publicly admitted domains are returned."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1},"description":"Page number."},{"name":"pageSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":52},"description":"Measurements per page; the historical default is preserved."}],"security":[],"responses":{"200":{"description":"Stored public data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/History"}}}},"400":{"description":"Invalid request","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Domain or measurement not available","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; retry after 60 seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/domains/{domain}/scans/{scanId}":{"get":{"operationId":"getMeasurement","summary":"Historical measurement and its selected findings","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registrable domain name. IDNA and an optional www prefix are normalised. Only publicly admitted domains are returned."},{"name":"scanId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,100}$"},"description":"A measurement ID returned in this domain’s history."}],"security":[],"responses":{"200":{"description":"Stored public data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Invalid request","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Domain or measurement not available","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; retry after 60 seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/stats":{"get":{"operationId":"getObservatoryStats","summary":"Coverage, distribution and weekly trends","parameters":[],"security":[],"responses":{"200":{"description":"Stored public data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Statistics"}}}},"400":{"description":"Invalid request","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Domain or measurement not available","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; retry after 60 seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/status":{"get":{"operationId":"getScannerStatus","summary":"Scanner status and eligible queue counts","parameters":[],"security":[],"responses":{"200":{"description":"Stored public data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"description":"Invalid request","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Domain or measurement not available","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; retry after 60 seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"Domain":{"type":"object","required":["name","scoreComparable","measurementComparable"],"properties":{"name":{"type":"string"},"last_score":{"type":["number","null"]},"last_score_at":{"type":["string","null"],"format":"date-time"},"last_scanned_at":{"type":["string","null"],"format":"date-time"},"latest_scan":{"type":["string","null"]},"discovered_at":{"type":["string","null"],"format":"date-time"},"admitted_at":{"type":["string","null"],"format":"date-time"},"completeness":{"type":["number","null"]},"unknown_checks":{"type":["string","null"]},"measurement_state":{"type":"string","enum":["never","complete","incomplete"]},"scan_state":{"type":"string","enum":["queued","scanning","complete","incomplete","failed"]},"tranco_rank":{"type":["number","null"]},"tranco_list_id":{"type":["string","null"]},"tranco_date":{"type":["string","null"],"format":"date"},"scoreComparable":{"type":"boolean"},"measurementComparable":{"type":"boolean"}}},"Scan":{"type":"object","required":["id","measured_at","score","completeness","comparable"],"properties":{"id":{"type":"string"},"measured_at":{"type":["string","null"],"format":"date-time"},"score":{"type":["number","null"]},"completeness":{"type":"number","minimum":0,"maximum":100},"comparable":{"type":"boolean"},"metrics":{"type":["object","null"],"description":"Duration, request/retry counts, deadline flag and optional fallback counters."},"evaluation":{"type":["object","null"],"properties":{"value":{"type":["number","null"]},"earned":{"type":"number"},"possible":{"type":"number"},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"earned":{"type":"number"},"possible":{"type":"number"},"score":{"type":["number","null"]}}}},"contributions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"earned":{"type":["number","null"]},"possible":{"type":"number"},"applicable":{"type":"boolean"}}}}}}}},"Finding":{"type":"object","properties":{"check_id":{"type":"string"},"category":{"type":"string","enum":["web","email","dns"]},"status":{"type":"string","enum":["pass","partial","fail","unknown","unavailable","info"]},"summary":{"type":"string"},"evidence":{"type":["string","null"],"description":"Selected public evidence; null after detailed evidence expires."},"remediation":{"type":"string"},"credit":{"type":["number","null"]},"applicable":{"type":["boolean","null"]}}},"Report":{"type":"object","required":["domain","scan","findings"],"properties":{"domain":{"$ref":"#/components/schemas/Domain"},"scan":{"anyOf":[{"$ref":"#/components/schemas/Scan"},{"type":"null"}]},"findings":{"type":"array","items":{"$ref":"#/components/schemas/Finding"}}}},"Directory":{"type":"object","required":["items","total","page","pageSize","pageCount","query"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"total":{"type":"integer"},"page":{"type":"integer"},"pageSize":{"type":"integer"},"pageCount":{"type":"integer"},"query":{"type":"object","description":"Validated effective directory parameters, including defaults."}}},"History":{"type":"object","required":["items","total","page","pageSize","pageCount"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Scan"}},"total":{"type":"integer"},"page":{"type":"integer"},"pageSize":{"type":"integer"},"pageCount":{"type":"integer"}}},"Statistics":{"type":"object","properties":{"discovered":{"type":"integer"},"admitted":{"type":"integer"},"scanned":{"type":"integer"},"fresh":{"type":"integer"},"average":{"type":["number","null"]},"distribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"updatedAt":{"type":["string","null"],"format":"date-time"},"trendState":{"type":"string","enum":["awaiting-coverage","awaiting-first-snapshot","ready"]},"initialCoverage":{"type":"object","properties":{"tracked":{"type":"integer"},"measured":{"type":"integer"}}},"nextSnapshotAt":{"type":["string","null"],"format":"date-time"},"trend":{"type":"array","items":{"type":"object","properties":{"weekEnding":{"type":["string","null"],"format":"date-time"},"average":{"type":["number","null"]},"tracked":{"type":"integer"},"measured":{"type":"integer"},"complete":{"type":"integer"},"incomplete":{"type":"integer"}}}}}},"Status":{"type":"object","properties":{"state":{"type":"string","enum":["online","paused","maintenance","offline"]},"lastSeenAt":{"type":["string","null"],"format":"date-time"},"activeJobs":{"type":"integer"},"queuedJobs":{"type":"integer"}}}}}}