{"openapi":"3.1.0","info":{"title":"startidea research and workspace API","version":"2.3.0","description":"Public GETs never invoke paid providers. Discovery TTL is 7 days; JSON POST checks up to 3 companies, NDJSON checks all returned companies. Paid POSTs have no durable replay key: inspect cached state after an ambiguous timeout. Freshness timestamps are retained on failed crawls. Additive response fields may appear."},"servers":[{"url":"https://www.safecli.org"}],"paths":{"/api/index":{"get":{"operationId":"readIndex","summary":"Read up to 100 cached workflows plus bundled seeds; no pagination currently.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[]}},"/api/search":{"get":{"operationId":"readCachedResearch","summary":"Read an exact normalized query. Missing cache returns search:null; no paid crawl.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":350}}],"description":"q omitted or empty returns {search:null,refreshed:false}. Matching uses NFKC normalization, trimmed/collapsed whitespace, and lowercase. This endpoint never invokes a provider."},"post":{"operationId":"researchIdea","summary":"JSON: discover up to 20 and check the first 3. NDJSON: publish early results, add matches, and check every returned company.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":3,"maxLength":350}},"required":["query"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchMutationResponse"}},"application/x-ndjson":{"schema":{"$ref":"#/components/schemas/StreamEvent"},"x-framing":"One JSON object per newline, not a JSON array. Results are full snapshots. Replace by search.key; do not append duplicates. An HTTP 200 can end in an error event. EOF without complete is incomplete; GET the cache before retrying."}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"paid research or bounded monitor; explicit authorization required","parameters":[{"name":"Accept","in":"header","schema":{"type":"string","enum":["application/json","application/x-ndjson"],"default":"application/json"}}]}},"/api/company":{"get":{"operationId":"readCompany","summary":"Read one indexed company with sources; no paid crawl.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"}}]}},"/api/company/refresh":{"post":{"operationId":"refreshCompany","summary":"Refresh an existing company against official pages.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"paid research or bounded monitor; explicit authorization required","parameters":[]}},"/api/updates":{"get":{"operationId":"readUpdates","summary":"Read up to 50 most recent observed changes; not confirmed product launches.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatesResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[]}},"/api/landscape":{"get":{"operationId":"readLandscape","summary":"Description similarity, coverage, 14-day observations; up to 100 workflows, 1000 company/check records, 300 updates.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[]}},"/api/agent":{"get":{"operationId":"readAgentLoop","summary":"Read workspace loop and authorization rules.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[]}},"/api/monitor":{"post":{"operationId":"monitorEvidence","summary":"One claimed pass per UTC day; up to 12 aging companies and one stale discovery.","security":[],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"paid research or bounded monitor; explicit authorization required","parameters":[]}},"/api/workspace/ideas":{"get":{"operationId":"listIdeas","summary":"Read up to 200 of your ideas ordered by most recently updated; no pagination currently.","security":[{"workspaceBearer":[]}],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[]},"post":{"operationId":"createIdea","summary":"Create a private idea.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"buyer":{"type":"string"},"problem":{"type":"string"},"workflow":{"type":"string"},"tags":{"type":"array","maxItems":8,"items":{"type":"string","maxLength":30}},"watch":{"type":"boolean"}},"required":["query"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[]}},"/api/workspace/ideas/{id}":{"get":{"operationId":"readIdea","summary":"Read your idea.","security":[{"workspaceBearer":[]}],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"editIdea","summary":"Edit or reversibly archive your idea; latest revision required.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1},"query":{"type":"string"},"buyer":{"type":"string"},"problem":{"type":"string"},"workflow":{"type":"string"},"notes":{"type":"string"},"archived":{"type":"boolean"}},"required":["revision"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/workspace/ideas/{id}/brief":{"get":{"operationId":"readBrief","summary":"Read structured customer brief with alternatives and feedback.","security":[{"workspaceBearer":[]}],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/workspace/ideas/{id}/spec":{"post":{"operationId":"createSpec","summary":"Save a versioned deterministic brief; not an autonomous LLM action.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1}},"required":["revision"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/workspace/ideas/{id}/experiments":{"post":{"operationId":"planExperiment","summary":"Fix hypothesis, metric, success target and minimum sample before results.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1},"hypothesis":{"type":"string"},"channel":{"type":"string"},"metric":{"type":"string"},"target":{"type":"number","exclusiveMinimum":0},"minimumSample":{"type":"integer","minimum":1}},"required":["revision","hypothesis","channel","metric","target","minimumSample"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/workspace/ideas/{id}/experiments/{experimentId}":{"post":{"operationId":"recordResult","summary":"Record immutable aggregate results; evidence notes required.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1},"observed":{"type":"number","minimum":0},"sampleSize":{"type":"integer","minimum":0},"notes":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"}},"required":["revision","observed","sampleSize","notes"]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"experimentId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/workspace/keys":{"get":{"operationId":"listKeys","summary":"Human Supabase session only; metadata, never raw keys.","security":[{"workspaceBearer":[]}],"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"read-only","parameters":[]},"post":{"operationId":"createKey","summary":"Human session only; 30-day key displayed once.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"}},"required":[]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[]}},"/api/workspace/keys/{id}/revoke":{"post":{"operationId":"revokeKey","summary":"Human session only; revoke your workspace key.","security":[{"workspaceBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful response; see named schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceResponse"}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-action-effect":"private mutation; revision required except creation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/alerts/status":{"get":{"operationId":"readAlertAvailability","summary":"Read email availability without account information.","responses":{"200":{"description":"Availability","content":{"application/json":{"schema":{"type":"object","properties":{"configured":{"type":"boolean"}},"required":["configured"]}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[],"security":[],"x-action-effect":"read-only"}},"/api/workspace/alerts":{"get":{"operationId":"readEmailPreferences","summary":"Signed-in human only. Read your own email preferences.","responses":{"200":{"description":"Own preferences","content":{"application/json":{"schema":{"type":"object","properties":{"configured":{"type":"boolean"},"subscription":{"anyOf":[{"$ref":"#/components/schemas/AlertSubscription"},{"type":"null"}]}},"required":["configured","subscription"]}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[],"security":[{"workspaceBearer":[]}],"x-action-effect":"read-only"},"post":{"operationId":"requestEmailConfirmation","summary":"Explicit human consent only. Send confirmation; does not activate alerts.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254},"domains":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string"}},"consent":{"const":true}},"required":["email","domains","consent"]}}}},"responses":{"200":{"description":"Confirmation accepted by provider","content":{"application/json":{"schema":{"type":"object","properties":{"pending":{"const":true}},"required":["pending"]}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[],"security":[{"workspaceBearer":[]}],"x-action-effect":"sends confirmation email; explicit human consent required"},"delete":{"operationId":"pauseEmailAlerts","summary":"Signed-in human only. Pause your email subscription.","responses":{"200":{"description":"Paused","content":{"application/json":{"schema":{"type":"object","properties":{"paused":{"const":true}},"required":["paused"]}}}},"400":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method. Allow lists supported methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"}}}},"409":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rejected before provider work. Wait Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Error envelope. For an ambiguous paid POST, read cached evidence before deciding whether to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[],"security":[{"workspaceBearer":[]}],"x-action-effect":"pauses own email alerts"}}},"components":{"securitySchemes":{"workspaceBearer":{"type":"http","scheme":"bearer","description":"Supabase session token or owner-scoped 30-day workspace key. Key-management routes reject agent keys."}},"schemas":{"Company":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"description":{"type":"string"},"readiness":{"type":"string","enum":["Enterprise ready","Enterprise claimed","Early stage","Unverified"]},"api":{"type":"string","enum":["Public API","API mentioned","No API yet","Unknown"]},"checkedAt":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"title":{"type":"string"},"kind":{"type":"string"},"excerpt":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"}}}},"assessment":{"$ref":"#/components/schemas/Assessment"},"fit":{"type":"string","enum":["direct","adjacent"],"description":"Research relevance to the specific buyer/workflow. Missing means not yet classified."}},"required":["name","domain","description","readiness","api","checkedAt","sources"]},"CompanyResponse":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/Company"}}},"ResearchResponse":{"type":"object","properties":{"search":{"anyOf":[{"type":"null"},{"$ref":"#/components/schemas/Search"}]},"refreshed":{"type":"boolean"}},"required":["search","refreshed"]},"WorkspaceResponse":{"type":"object","properties":{"key":{"type":"object"},"spec":{"type":"object"},"revoked":{"type":"boolean"},"idea":{"type":"object"},"ideas":{"type":"array","items":{"type":"object"}},"keys":{"type":"array","items":{"type":"object"}},"token":{"type":"string"}}},"ObjectResponse":{"type":"object","description":"Route-specific object. Existing field shapes preserved; bounded record counts stated in operation descriptions."},"Error":{"type":"object","properties":{"error":{"type":"string"},"errorCode":{"type":"string","enum":["invalid_request","authentication_required","forbidden","not_found","method_not_allowed","conflict","payload_too_large","rate_limited","server_error","upstream_error","unavailable","timeout","request_failed"]},"retryable":{"type":"boolean","description":"True only when this rejected request is safe to retry after the specified delay. Never automatically replay an ambiguous paid POST."}},"required":["error","errorCode","retryable"]},"Assessment":{"type":"object","properties":{"version":{"type":"integer"},"rubric":{"type":"string"},"verdict":{"type":"string"},"takeaway":{"type":"string"},"sourceCount":{"type":"integer"},"tested":{"const":false},"quality":{"type":"string"},"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"status":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"excerpt":{"type":"string"}},"required":["url","excerpt"]}},"cautions":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"excerpt":{"type":"string"}},"required":["url","excerpt"]}},"nextStep":{"type":"string"}},"required":["id","label","status","evidence","cautions","nextStep"]}}},"required":["version","rubric","verdict","takeaway","sourceCount","tested","quality","dimensions"]},"MarketSignal":{"type":"object","properties":{"type":{"type":"string","enum":["funding","launch","adoption","acquisition","unmet-need"]},"date":{"type":"string","format":"date"},"url":{"type":"string","format":"uri"},"companyDomain":{"type":"string"},"summary":{"type":"string"},"verified":{"type":"boolean"}},"required":["type","date","url","summary","verified"]},"MarketAssessment":{"type":"object","properties":{"version":{"type":"integer"},"label":{"type":"string"},"tone":{"type":"string"},"reason":{"type":"string"},"direct":{"type":"integer"},"adjacent":{"type":"integer"},"unclassified":{"type":"integer"},"total":{"type":"integer"},"signals":{"type":"array","items":{"$ref":"#/components/schemas/MarketSignal"}},"signalCount":{"type":"integer"},"coverage":{"type":"string"},"coverageComplete":{"type":"boolean"},"windowDays":{"type":"integer"},"method":{"type":"string"}},"required":["label","reason","direct","adjacent","total","signals","coverage","coverageComplete","method"]},"Search":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"checkedAt":{"type":"string"},"companies":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"opportunities":{"type":"array","items":{"type":"string"}},"discoveryComplete":{"type":"boolean"},"refreshed":{"type":"integer"},"requestCostUsd":{"type":"number"},"cached":{"type":"boolean"},"market":{"$ref":"#/components/schemas/MarketAssessment"},"coverage":{"type":"object"},"discoveryVersion":{"type":"integer"}},"required":["key","query","checkedAt","companies","opportunities"]},"ResearchMutationResponse":{"type":"object","properties":{"search":{"$ref":"#/components/schemas/Search"},"warning":{"type":"string"},"storage":{"type":"string"}},"required":["search"]},"IndexResponse":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"category":{"type":"string"},"companyCount":{"type":"integer"},"reviewedCount":{"type":"integer"},"checkedAt":{"type":"string"},"market":{"$ref":"#/components/schemas/MarketAssessment"}},"required":["key","query","category","companyCount","reviewedCount","checkedAt"]}},"defaultSearch":{"$ref":"#/components/schemas/Search"},"distinctCompanies":{"type":"integer"},"storage":{"type":"string"}},"required":["spaces","defaultSearch","distinctCompanies","storage"]},"RefreshResponse":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/Company"},"requestId":{"type":"string"},"refreshed":{"type":"integer"},"costUsd":{"type":"number"},"warning":{"type":"string"}},"required":["company","requestId","refreshed","costUsd"]},"UpdatesResponse":{"type":"object","properties":{"updates":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"},"summary":{"type":"string"},"updatedAt":{"type":"string"},"kind":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"}},"required":["url","title"]}}},"required":["domain","name","summary","updatedAt","kind","sources"]}}},"required":["updates"]},"StreamEvent":{"oneOf":[{"type":"object","properties":{"type":{"const":"results"},"search":{"$ref":"#/components/schemas/Search"}},"required":["type","search"]},{"type":"object","properties":{"type":{"const":"complete"},"search":{"$ref":"#/components/schemas/Search"},"warning":{"type":"string"}},"required":["type","search"]},{"type":"object","properties":{"type":{"const":"error"},"error":{"type":"string"},"errorCode":{"type":"string"},"retryable":{"const":false}},"required":["type","error","errorCode","retryable"]}]},"AlertSubscription":{"type":"object","properties":{"email":{"type":"string","format":"email"},"domains":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"},"pending":{"type":"boolean"},"confirmedAt":{"type":["string","null"]}},"required":["email","domains","enabled","pending"]}}}}