{"openapi":"3.1.0","info":{"title":"ANA Domainer — Hermes Research Gateway","version":"0.2.0","description":"ANA executes evidence and live tasks; Hermes interprets investment decisions. No daily request cap. Radar potential provider billing requires per-task operator approval. No portfolio mutations or domain purchase."},"servers":[{"url":"/api/hermes/v1"}],"components":{"securitySchemes":{"hermesBearer":{"type":"http","scheme":"bearer","bearerFormat":"Opaque Hermes credential"}},"schemas":{"BridgeEnvelope":{"type":"object","required":["schema","kind","generated_at","provenance","budget","data"],"properties":{"schema":{"type":"string","const":"ana.hermes.bridge/0.2"},"kind":{"type":"string"},"request_id":{"type":["string","null"]},"generated_at":{"type":"string","format":"date-time"},"provenance":{"type":"object","properties":{"source":{"type":"string"},"mode":{"type":"string"},"independent_verification_not_implied":{"type":"boolean"},"interpretation_notes":{"type":"array","items":{"type":"string"}}}},"budget":{"type":"object","properties":{"new_external_provider_calls":{"type":["integer","null"]},"new_paid_provider_cost_usd":{"type":["number","null"]},"read_only":{"type":"boolean"}}},"data":{"type":"object"}}},"TaskIntent":{"type":"object","additionalProperties":false,"required":["kind","domains"],"properties":{"kind":{"type":"string","enum":["analysis","radar","target_probe"]},"domains":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","description":"Registrable domains. analysis/radar .com only; target_probe any TLD."}},"depth":{"type":"string","enum":["core","expanded"],"description":"analysis only"},"mode":{"type":"string","enum":["RADAR_BULK","FULL_DEEP"],"description":"radar only; approval always required"}}},"HistoricalSale":{"type":"object","required":["id","fqdn","price","date"],"properties":{"id":{"type":"integer"},"sourceRow":{"type":["integer","null"]},"fqdn":{"type":"string"},"sld":{"type":"string"},"tld":{"type":"string"},"price":{"type":"number"},"date":{"type":"string"},"venue":{"type":"string"}}},"DomainSalesData":{"type":"object","required":["fqdn","sld","exact_fqdn_sales","exact_sld_any_tld"],"properties":{"fqdn":{"type":"string"},"sld":{"type":"string"},"exact_fqdn_sales":{"type":"array","items":{"$ref":"#/components/schemas/HistoricalSale"}},"exact_sld_any_tld":{"type":"array","items":{"$ref":"#/components/schemas/HistoricalSale"}}}}}},"paths":{"/openapi.json":{"get":{"security":[],"operationId":"getAnaHermesOpenApi","summary":"Public contract","responses":{"200":{"description":"OpenAPI 3.1"}}}},"/capabilities":{"get":{"operationId":"getAnaHermesCapabilities","summary":"Scopes, policies, available task kinds","security":[{"hermesBearer":[]}],"x-ana-scope":"any","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tools/catalog":{"get":{"operationId":"listAnaHermesTools","summary":"Tool routing catalog with when-to-use descriptions","security":[{"hermesBearer":[]}],"x-ana-scope":"any","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/providers/snapshot":{"get":{"operationId":"getAnaProviderSnapshot","summary":"Saved enabled/usage/health indicators; NO live provider test","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/dataset":{"get":{"operationId":"getAnaSalesDatasetMetadata","summary":"Historical sales import metadata","security":[{"hermesBearer":[]}],"x-ana-scope":"sales:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/sales/search":{"get":{"operationId":"searchAnaHistoricalSales","summary":"Bounded historical sales search","security":[{"hermesBearer":[]}],"x-ana-scope":"sales:read","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/sales/stats":{"get":{"operationId":"getAnaSalesKeywordStatistics","summary":"Keyword history statistics","security":[{"hermesBearer":[]}],"x-ana-scope":"sales:read","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/sales/domain/{fqdn}":{"get":{"operationId":"getAnaDomainSalesHistory","summary":"Exact FQDN vs exact SLD sales across TLDs","security":[{"hermesBearer":[]}],"x-ana-scope":"sales:read","parameters":[{"name":"fqdn","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/sales/comps/{fqdn}":{"get":{"operationId":"getAnaSalesComparables","summary":"Structural/semantic comps .com only","security":[{"hermesBearer":[]}],"x-ana-scope":"sales:read","parameters":[{"name":"fqdn","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/radar/upgrade/runs":{"get":{"operationId":"listAnaUpgradeRadarRuns","summary":"Saved Upgrade Radar runs","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/radar/upgrade/runs/{runId}":{"get":{"operationId":"getAnaUpgradeRadarRun","summary":"Saved run progress","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:read","parameters":[{"name":"runId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/radar/upgrade/runs/{runId}/report":{"get":{"operationId":"getAnaUpgradeRadarSavedReport","summary":"Saved final run report","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:read","parameters":[{"name":"runId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/radar/company-v3/sessions":{"get":{"operationId":"listAnaCompanyRadarSavedSessions","summary":"Saved Company Radar sessions","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/portfolio/overview":{"get":{"operationId":"getAnaPortfolioOverview","summary":"Owned portfolio summary","security":[{"hermesBearer":[]}],"x-ana-scope":"portfolio:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/portfolio/domains":{"get":{"operationId":"listAnaPortfolioDomains","summary":"Owned portfolio domains","security":[{"hermesBearer":[]}],"x-ana-scope":"portfolio:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/portfolio/flight":{"get":{"operationId":"getAnaPortfolioFlightSummary","summary":"48h pilot historical Flight Recorder read","security":[{"hermesBearer":[]}],"x-ana-scope":"portfolio:read","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks/preview":{"post":{"operationId":"previewAnaResearchTask","summary":"Zero-network cost classification before creating task","security":[{"hermesBearer":[]}],"x-ana-scope":"task scope by kind","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskIntent"}}}},"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks":{"post":{"operationId":"submitAnaResearchTask","summary":"Idempotent task creation; Idempotency-Key required; Radar awaits approval","security":[{"hermesBearer":[]}],"x-ana-scope":"task scope by kind","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskIntent"}}}},"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}},"get":{"operationId":"listAnaResearchTasks","summary":"List tasks created by this credential","security":[{"hermesBearer":[]}],"x-ana-scope":"task scope","parameters":[],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks/by-key/{idempotencyKey}":{"get":{"operationId":"lookupAnaResearchTask","summary":"Recover task by original Idempotency-Key","security":[{"hermesBearer":[]}],"x-ana-scope":"task scope","parameters":[{"name":"idempotencyKey","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks/{taskId}":{"get":{"operationId":"getAnaResearchTask","summary":"Inspect task and engine progress","security":[{"hermesBearer":[]}],"x-ana-scope":"task scope by kind","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks/{taskId}/results":{"get":{"operationId":"getAnaResearchTaskResults","summary":"Paginated task outputs","security":[{"hermesBearer":[]}],"x-ana-scope":"task scope by kind","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks/{taskId}/report":{"get":{"operationId":"getAnaResearchTaskReport","summary":"Final persisted Radar report, if ready","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:run","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}},"/tasks/{taskId}/evidence":{"get":{"operationId":"getAnaResearchTaskEvidence","summary":"Stored Radar evidence rows","security":[{"hermesBearer":[]}],"x-ana-scope":"radar:run","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ANA envelope; structured provenance, state and evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeEnvelope"}}}},"400":{"description":"Invalid request/input"},"401":{"description":"Invalid/expired Hermes credential"},"403":{"description":"Scope denied or operator approval missing"},"409":{"description":"Same idempotency key with different payload"},"413":{"description":"Response too large: paginate or narrow"},"422":{"description":"Unsupported suffix for chosen engine; try target_probe"},"429":{"description":"Short-window IP burst restriction, NOT daily quota"},"503":{"description":"Missing migration or engine unavailable"}}}}}}