{"openapi":"3.0.3","info":{"title":"ReplyNodes Fetcher API","version":"v1","description":"Read-only data APIs for AI agents. Bearer auth. Prepaid credits / free tier.\n\nClick **Authorize** and paste ONLY the API key (no \"Bearer\" prefix) — Swagger adds it automatically."},"servers":[{"url":"https://api.replynodes.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rn_test_<64hex> or rn_live_<64hex>","description":"API key. Paste the raw key only (e.g. rn_test_...) — the \"Bearer \" prefix is added automatically."}},"schemas":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/components/schemas/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/BrandLogoData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/components/schemas/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/BrandFontsData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/components/schemas/PaymentRequiredAccountlessExtensions"},{"$ref":"#/components/schemas/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/components/schemas/PaymentRequired"},{"$ref":"#/components/schemas/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/components/schemas/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"$ref":"#/components/schemas/MonitorWebhook","nullable":true}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/components/schemas/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Monitor"}},"meta":{"$ref":"#/components/schemas/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Monitor"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"initialization":{"type":"string","description":"Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MonitorRun"}},"meta":{"$ref":"#/components/schemas/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/components/schemas/WatchTopic"}},"requested_frequency":{"$ref":"#/components/schemas/WatchFrequency"},"webhook":{"$ref":"#/components/schemas/WatchWebhook","nullable":true}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/components/schemas/WatchTopic"}},"requested_frequency":{"$ref":"#/components/schemas/WatchFrequency"},"status":{"$ref":"#/components/schemas/WatchStatus"},"webhook":{"$ref":"#/components/schemas/WatchWebhook","nullable":true}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"type":"string","nullable":true},"observed_since":{"type":"string","format":"date-time","nullable":true},"last_observed_at":{"type":"string","format":"date-time","nullable":true}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"type":"string","format":"date-time","nullable":true}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/components/schemas/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"type":"string","format":"date-time","nullable":true}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/components/schemas/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/components/schemas/WatchTopic"}},"requested_frequency":{"$ref":"#/components/schemas/WatchFrequency"},"effective_frequency":{"$ref":"#/components/schemas/WatchFrequency","nullable":true},"status":{"$ref":"#/components/schemas/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"type":"string","format":"date-time","nullable":true},"coverage":{"$ref":"#/components/schemas/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/components/schemas/WatchTopicInterval"}},"webhook":{"$ref":"#/components/schemas/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/components/schemas/CCIMoney"},"new_price":{"$ref":"#/components/schemas/CCIMoney"},"price":{"$ref":"#/components/schemas/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"type":"string","nullable":true}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"type":"string","nullable":true},"state_version":{"type":"integer","nullable":true},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"type":"string","nullable":true},"model_config_hash":{"type":"string","nullable":true},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"type":"string","nullable":true},"retracted_event_id":{"type":"string","nullable":true},"lineage_event_id":{"type":"string","nullable":true},"correction_reason":{"type":"string","nullable":true}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"type":"string","nullable":true},"after_observation_id":{"type":"string","nullable":true},"before_snapshot_id":{"type":"string","nullable":true},"after_snapshot_id":{"type":"string","nullable":true},"before_content_hash":{"type":"string","nullable":true},"after_content_hash":{"type":"string"},"before_observed_at":{"type":"string","format":"date-time","nullable":true},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"type":"string","nullable":true},"model_config_hash":{"type":"string","nullable":true},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/components/schemas/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/components/schemas/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/CCIEventData"},"source":{"$ref":"#/components/schemas/CCIEventSource"},"before":{"$ref":"#/components/schemas/CCIStateRef"},"after":{"$ref":"#/components/schemas/CCIStateRef"},"detector":{"$ref":"#/components/schemas/CCIEventDetector"},"confidence":{"$ref":"#/components/schemas/CCIConfidence"},"lineage":{"$ref":"#/components/schemas/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/components/schemas/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"type":"string","format":"date-time","nullable":true},"observed_to":{"type":"string","format":"date-time","nullable":true},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"type":"string","format":"date-time","nullable":true},"extractor":{"type":"string"},"method":{"type":"string","nullable":true},"model":{"type":"string","nullable":true},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/components/schemas/WatchEntity"},"coverage":{"$ref":"#/components/schemas/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/components/schemas/CCITopicState"},"product":{"$ref":"#/components/schemas/CCITopicState"},"integrations":{"$ref":"#/components/schemas/CCITopicState"},"customers":{"$ref":"#/components/schemas/CCITopicState"},"positioning":{"$ref":"#/components/schemas/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/components/schemas/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Watch"},"meta":{"$ref":"#/components/schemas/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CCIEvent"},"meta":{"$ref":"#/components/schemas/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CCIIntelligence"},"meta":{"$ref":"#/components/schemas/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Watch"}},"meta":{"$ref":"#/components/schemas/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CCIEvent"}},"meta":{"$ref":"#/components/schemas/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/components/schemas/WatchTopic"},"current":{"$ref":"#/components/schemas/CCITopicState","nullable":true},"history":{"type":"array","items":{"$ref":"#/components/schemas/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/components/schemas/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}},"security":[{"bearerAuth":[]}],"paths":{"/md/{target}":{"servers":[{"url":"https://md.replynodes.com"}],"get":{"operationId":"anonymous_markdown","tags":["markdown"],"summary":"Read a public URL as Markdown","description":"Already-anonymous Markdown gateway route for canonical capability url-to-markdown (fixed Tier A: 20 valid requests per trusted client-IP bucket per UTC calendar day). Admission occurs after method and target/SSRF validation and before cache/upstream work; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. Redis failure returns 503 degraded.","security":[],"parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","description":"Complete URL or bare public hostname, URL-encoded as needed."}}],"responses":{"200":{"description":"Raw Markdown response; quota headers are included."},"400":{"description":"Invalid target or unsafe public URL."},"429":{"description":"Anonymous daily quota exhausted. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After, and the typed continuation.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymousQuotaError"}}}},"503":{"description":"Shared Redis unavailable; request rejected closed."}}}},"/{domain}":{"servers":[{"url":"https://brand.replynodes.com"}],"get":{"operationId":"anonymous_brand","tags":["brand"],"summary":"Read public brand intelligence","description":"Already-anonymous Brand gateway route for canonical capability brand-kit (fixed Tier A: 20 valid requests per trusted client-IP bucket per UTC calendar day). Domain validation occurs before admission; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp.","security":[],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9.-]+$"}}],"responses":{"200":{"description":"Brand intelligence response; quota headers are included."},"400":{"description":"Invalid or blocked domain."},"429":{"description":"Anonymous daily quota exhausted; includes typed continuation and standard quota headers.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymousQuotaError"}}}},"503":{"description":"Shared Redis unavailable; request rejected closed."}}}},"/":{"servers":[{"url":"https://pdf.replynodes.com"}],"get":{"operationId":"pdf_document_help","summary":"PDF conversion endpoint help","description":"Documentation-only root GET for the anonymous PDF conversion contract. POST converts a public PDF URL; HEAD returns the same documentation headers. Allowed methods: GET, HEAD, POST. Limits: 10 MiB source/download, 50 pages, 60 seconds, 20 conversions/IP/hour, 2 active conversions/IP, and a maximum encoded JSON response of 1 MiB. MCP discovery identifies the sole read_document tool at https://mcp.replynodes.com/mcp.","tags":["pdf"],"security":[],"responses":{"200":{"description":"Endpoint usage documentation"},"405":{"description":"Method not allowed; Allow: GET, HEAD, POST"}}},"head":{"operationId":"pdf_document_help_head","summary":"PDF conversion endpoint headers","description":"Documentation-only root HEAD for the anonymous PDF conversion contract. POST converts a public PDF URL and GET returns usage documentation. Allowed methods: GET, HEAD, POST. Limits: 10 MiB source/download, 50 pages, 60 seconds, 20 conversions/IP/hour, 2 active conversions/IP, and a maximum encoded JSON response of 1 MiB. MCP discovery identifies the sole read_document tool at https://mcp.replynodes.com/mcp.","tags":["pdf"],"security":[],"responses":{"200":{"description":"Endpoint usage documentation headers"},"405":{"description":"Method not allowed; Allow: GET, HEAD, POST"}}},"post":{"servers":[{"url":"https://pdf.replynodes.com"}],"operationId":"read_document","summary":"Read a public PDF as Markdown for AI agents","description":"Direct public HTTP POST to https://pdf.replynodes.com/ requires no account, API key, or cookie. POST converts one public PDF URL to Markdown. GET and HEAD on the root are documentation-only; allowed methods are GET, HEAD, POST. This PDF to Markdown response is designed for read PDF, PDF for AI agents, extract PDF text, and PDF context workflows. The MCP read_document / tools/call at https://mcp.replynodes.com/mcp requires the existing MCP authorization boundary; MCP is not anonymous. Limits: 10 MiB source/download, 50 pages, 60 seconds, 20 conversions/IP/hour, 2 active conversions/IP, and a maximum encoded JSON response of 1 MiB including the trailing newline. MCP discovery identifies the sole read_document tool at https://mcp.replynodes.com/mcp.","tags":["pdf"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","pattern":"^https?://"}}}}}},"responses":{"200":{"description":"Converted PDF","content":{"application/json":{"schema":{"type":"object","required":["type","mime_type","markdown","metadata"],"properties":{"type":{"const":"document"},"mime_type":{"const":"application/pdf"},"markdown":{"type":"string"},"metadata":{"type":"object","required":["pages"],"properties":{"pages":{"type":"integer","minimum":1},"title":{"type":["string","null"]}}}}}}}},"400":{"description":"Malformed JSON, unknown fields, invalid URL, or unsafe public URL; standard error envelope"},"405":{"description":"Method not allowed; Allow: GET, HEAD, POST; standard error envelope"},"413":{"description":"PDF source/download exceeds 10 MiB or exceeds 50 pages; standard error envelope"},"429":{"description":"Hourly quota or 2-active-conversions-per-IP limit; standard error envelope"},"502":{"description":"Private conversion runtime failed or encoded response would exceed 1 MiB; standard error envelope"},"503":{"description":"Shared Redis or private conversion runtime unavailable; standard error envelope"},"504":{"description":"Conversion exceeded 60 seconds; standard error envelope"}}}},"/v1/youtube/search":{"get":{"operationId":"youtube_search","tags":["youtube"],"parameters":[{"name":"term","in":"query","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/video/{id}":{"get":{"operationId":"youtube_video","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/channel/{id}":{"get":{"operationId":"youtube_channel","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/comments/{id}":{"get":{"operationId":"youtube_comments","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/playlist/{id}":{"get":{"operationId":"youtube_playlist","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/related/{id}":{"get":{"operationId":"youtube_related","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/transcript/{id}":{"get":{"operationId":"youtube_transcript","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/fetcher/healthz":{"get":{"summary":"Health check","security":[],"responses":{"200":{"description":"ok"}}}},"/fetcher/readyz":{"get":{"summary":"Readiness (auth/db status)","security":[],"responses":{"200":{"description":"ok"}}}},"/v1/hackernews/capabilities":{"get":{"summary":"List available operations","security":[],"responses":{"200":{"description":"ok"}}}},"/v1/hackernews/stories_top":{"get":{"operationId":"hackernews_stories_top","summary":"Fetch current Hacker News top stories","description":"Fetch current Hacker News top stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_new":{"get":{"operationId":"hackernews_stories_new","summary":"Fetch current Hacker News new stories","description":"Fetch current Hacker News new stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_best":{"get":{"operationId":"hackernews_stories_best","summary":"Fetch current Hacker News best stories","description":"Fetch current Hacker News best stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_ask":{"get":{"operationId":"hackernews_stories_ask","summary":"Fetch current Ask HN stories","description":"Fetch current Ask HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_show":{"get":{"operationId":"hackernews_stories_show","summary":"Fetch current Show HN stories","description":"Fetch current Show HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_job":{"get":{"operationId":"hackernews_stories_job","summary":"Fetch current Hacker News job postings","description":"Fetch current Hacker News job postings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/search":{"get":{"operationId":"hackernews_search","summary":"Search Hacker News via Algolia","description":"Search Hacker News via Algolia. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search query.","schema":{"type":"string"}},{"name":"tags","in":"query","required":false,"description":"Algolia HN Search tag filter (e.g. story, comment, ask_hn).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":0}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/item/{id}":{"get":{"operationId":"hackernews_item","summary":"Fetch a single Hacker News item and its comment tree","description":"Fetch a single Hacker News item and its comment tree. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"id","in":"path","required":true,"description":"Hacker News item id.","schema":{"type":"integer"}},{"name":"depth","in":"query","required":false,"description":"Maximum comment-tree depth to resolve; values outside 1..10 are rejected.","schema":{"type":"integer","minimum":1,"maximum":10}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/user/{handle}":{"get":{"operationId":"hackernews_user","summary":"Fetch a public Hacker News user profile","description":"Fetch a public Hacker News user profile. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"handle","in":"path","required":true,"description":"Hacker News username.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/app":{"get":{"operationId":"app","summary":"Look up one public App Store application","description":"Look up one public App Store application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"Numeric track id; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"ratings","in":"query","required":false,"description":"Include ratings information.","schema":{"type":"boolean"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/list":{"get":{"operationId":"list","summary":"List applications from an iTunes collection","description":"List applications from an iTunes collection. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"collection","in":"query","required":false,"description":"Provider collection constant.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Provider category constant.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"num","in":"query","required":false,"description":"Number of applications; values outside 1..200 are rejected.","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"fullDetail","in":"query","required":false,"description":"Request detail enrichment.","schema":{"type":"boolean"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/search":{"get":{"operationId":"search","summary":"Search public App Store applications by term","description":"Search public App Store applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"num","in":"query","required":false,"description":"Number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"idsOnly","in":"query","required":false,"description":"Return ids without detail lookups.","schema":{"type":"boolean"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/developer":{"get":{"operationId":"developer","summary":"List applications by developer","description":"List applications by developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"devId","in":"query","required":true,"description":"public developer identifier.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/privacy":{"get":{"operationId":"privacy","summary":"Read public App Store privacy details","description":"Read public App Store privacy details. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":true,"description":"public application identifier.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/suggest":{"get":{"operationId":"suggest","summary":"Suggest public App Store search terms","description":"Suggest public App Store search terms. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/similar":{"get":{"operationId":"similar","summary":"List apps related to an application","description":"List apps related to an application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/reviews":{"get":{"operationId":"reviews","summary":"Read a page of public app reviews","description":"Read a page of public app reviews. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Review page; values outside 1..10 are rejected.","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"sort","in":"query","required":false,"description":"Provider review sort constant.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/ratings":{"get":{"operationId":"ratings","summary":"Read public app ratings","description":"Read public app ratings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/app_details/{id}":{"get":{"operationId":"googleplay_app_details","summary":"Fetch a single Google Play app's public detail record","description":"Fetch a single Google Play app's public detail record. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/search":{"get":{"operationId":"googleplay_search","summary":"Search public Google Play applications by term","description":"Search public Google Play applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/similar_apps/{id}":{"get":{"operationId":"googleplay_similar_apps","summary":"Fetch apps similar to a given Google Play package","description":"Fetch apps similar to a given Google Play package. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/permissions/{id}":{"get":{"operationId":"googleplay_permissions","summary":"Fetch a Google Play app's declared permissions","description":"Fetch a Google Play app's declared permissions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/reviews/{id}":{"get":{"operationId":"googleplay_reviews","summary":"Fetch public reviews for a Google Play app","description":"Fetch public reviews for a Google Play app. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"sort","in":"query","required":false,"description":"Upstream review sort order.","schema":{"type":"integer"}},{"name":"score","in":"query","required":false,"description":"Filter reviews to this star rating (1..5).","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"next_token","in":"query","required":false,"description":"Pagination token from a previous reviews response.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/developer":{"get":{"operationId":"googleplay_developer","summary":"Fetch public apps published by a Google Play developer","description":"Fetch public apps published by a Google Play developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"dev_id","in":"query","required":true,"description":"Google Play developer id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/categories":{"get":{"operationId":"googleplay_categories","summary":"List available Google Play category identifiers","description":"List available Google Play category identifiers. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/category_apps/{category}":{"get":{"operationId":"googleplay_category_apps","summary":"Fetch top public apps in a Google Play category","description":"Fetch top public apps in a Google Play category. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"category","in":"path","required":true,"description":"Google Play category identifier (e.g. GAME, SHOPPING).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/suggest":{"get":{"operationId":"googleplay_suggest","summary":"Fetch Google Play search-term suggestions","description":"Fetch Google Play search-term suggestions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/availability/{id}":{"get":{"operationId":"googleplay_availability","summary":"Fetch a Google Play app's per-storefront availability","description":"Fetch a Google Play app's per-storefront availability. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"countries","in":"query","required":false,"description":"Comma-separated storefront codes.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/data_safety/{id}":{"get":{"operationId":"googleplay_data_safety","summary":"Fetch a Google Play app's declared data-safety disclosure","description":"Fetch a Google Play app's declared data-safety disclosure. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/web/search":{"get":{"operationId":"web_search","summary":"Search the public web","description":"Search the public web through the normalized Web Search provider contract.","tags":["web_search"],"parameters":[{"name":"text","in":"query","required":true,"description":"Search query text.","schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"description":"Comma-separated search engines.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"Search region.","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"Provider date filter.","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"Restrict results to a site or domain.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"start","in":"query","required":false,"description":"Zero-based result offset.","schema":{"type":"integer","minimum":0}}],"security":[],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/scrape":{"get":{"operationId":"webcontext_scrape","summary":"Fetch one URL as clean Markdown","description":"Fetch one URL and return clean, main-content Markdown plus normalized metadata, links, and images. Backed by a privately deployed webclaw-server instance; upstream implementation details are never exposed.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}},{"name":"include_selectors","in":"query","required":false,"description":"Comma-separated CSS selectors to include (e.g. \"article,.content\").","schema":{"type":"string"}},{"name":"exclude_selectors","in":"query","required":false,"description":"Comma-separated CSS selectors to exclude (e.g. \"nav,.sidebar,footer\").","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextScrapeResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/crawl":{"get":{"operationId":"webcontext_crawl","summary":"Crawl same-origin links from a URL","description":"Crawl same-origin links starting from a URL and return normalized page results. max_pages/max_depth are clamped server-side regardless of the requested value.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}},{"name":"max_pages","in":"query","required":false,"description":"Maximum pages to crawl; clamped to 1..50.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"max_depth","in":"query","required":false,"description":"Maximum link depth; clamped to 1..3.","schema":{"type":"integer","minimum":1,"maximum":3}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextCrawlResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/map":{"get":{"operationId":"webcontext_map","summary":"Discover URLs belonging to a site","description":"Discover URLs belonging to a site without extracting page content. Results are deduplicated.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextMapResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/brand":{"get":{"operationId":"webcontext_brand","summary":"Extract public brand identity for a site","description":"Lightweight brand snapshot for one site URL: logos, colors, fonts, and basic public metadata. Prefer brand_retrieve for a fuller normalized brand profile or brand_search for fuzzy company-name discovery.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextBrandResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/retrieve":{"get":{"operationId":"brand_retrieve","summary":"Retrieve Brand","description":"Resolve the full brand profile of a company by domain, or extract brand details from one specific page URL: name, description, primary logo, logos, colors, fonts, social links, favicon, and og_image.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Company domain to resolve, e.g. apple.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract brand details from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandRetrieveResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/search":{"get":{"operationId":"brand_search","summary":"Search Brand","description":"Fuzzy brand or company search by name or domain; returns up to 10 lightweight matches with domain, name, and logo.","tags":["brand"],"parameters":[{"name":"query","in":"query","required":true,"description":"Brand name or domain to search for.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of matches to return (default and maximum 10).","schema":{"type":"integer","minimum":1,"maximum":10}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSearchResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/styleguide":{"get":{"operationId":"brand_styleguide","summary":"Get Styleguide","description":"Extract the design system of a website by domain or URL: colors, typography, spacing, and more.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract a styleguide from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandStyleguideResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/fonts":{"get":{"operationId":"brand_fonts","summary":"Get Fonts","description":"Extract the typography and font stack of a website by domain or URL.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract font information from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandFontsResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/logo":{"get":{"operationId":"brand_logo","summary":"Get Brand Logo","description":"Fetch the brand logo kit for one company domain: primary logo URL, candidate logo variants, favicon, and og_image.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Company domain to resolve, e.g. stripe.com. A bare domain only: no scheme, port, path, or credentials.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandLogoResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/company-research":{"get":{"operationId":"anonymous_company_research","tags":["research"],"summary":"Run the anonymous company-research workflow","description":"Top-level anonymous company-research workflow for canonical capability company-research (fixed Tier C: 3 valid requests per trusted client-IP bucket per UTC calendar day). A valid request is admitted once, before the read-only server-side fan-out; the url-to-markdown, brand-kit, and brand-logo primitives composed inside the workflow are server-owned and never charged a second anonymous bucket. Malformed input is rejected before admission; admitted provider failures consume one unit. X-RateLimit-Limit is 3, X-RateLimit-Remaining is the Tier C bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. Redis failure returns 503 degraded.","security":[],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Company domain, e.g. stripe.com. A bare public hostname only: no scheme, port, path, or credentials."}}],"responses":{"200":{"description":"Composed read-only research dossier; quota headers are included.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchWorkflowResponse"}}}},"400":{"description":"Invalid or blocked domain."},"429":{"description":"Anonymous daily quota exhausted. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After, and the typed continuation.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymousQuotaError"}}}},"502":{"description":"Normalized error with code upstream_unavailable when every primitive read fails."},"503":{"description":"Shared Redis unavailable; request rejected closed."}}}},"/v1/competitor-research":{"get":{"operationId":"anonymous_competitor_research","tags":["research"],"summary":"Run the anonymous competitor-research workflow","description":"Top-level anonymous competitor-research workflow for canonical capability competitor-research (fixed Tier C: 3 valid requests per trusted client-IP bucket per UTC calendar day). One admitted request fans out read-only to the company domain plus up to 5 competitor domains; the whole composition is charged once and primitives are never charged a second anonymous bucket. Malformed input (missing/invalid domain, empty/invalid/oversized competitor list) is rejected before admission. See /v1/company-research for the shared quota-header contract.","security":[],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Company domain, e.g. stripe.com."}},{"name":"competitors","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated competitor domains (1..5), e.g. netlify.com,cloudflare.com."}}],"responses":{"200":{"description":"Composed read-only research dossier with one entry per target; quota headers are included.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchWorkflowResponse"}}}},"400":{"description":"Invalid or blocked domain, or an empty/invalid/oversized competitor list."},"429":{"description":"Anonymous daily quota exhausted. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After, and the typed continuation.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymousQuotaError"}}}},"502":{"description":"Normalized error with code upstream_unavailable when every primitive read fails."},"503":{"description":"Shared Redis unavailable; request rejected closed."}}}},"/v1/reddit/search_posts":{"get":{"operationId":"search_posts","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/subreddit_posts/{subreddit}":{"get":{"operationId":"subreddit_posts","tags":["reddit"],"parameters":[{"name":"subreddit","in":"path","required":true,"schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"time_filter","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/post_by_id/{id}":{"get":{"operationId":"post_by_id","tags":["reddit"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/post_by_permalink":{"get":{"operationId":"post_by_permalink","tags":["reddit"],"parameters":[{"name":"permalink","in":"query","required":true,"schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/user_activity/{username}":{"get":{"operationId":"user_activity","tags":["reddit"],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/user_posts/{username}":{"get":{"operationId":"user_posts","tags":["reddit"],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"time_filter","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/entities/{domain}/events":{"parameters":[{"name":"domain","in":"path","required":true,"description":"Canonical registrable domain.","schema":{"type":"string"}}],"get":{"operationId":"companyEventDomainList","tags":["companyChanges"],"summary":"List Company Changes events for an Entity","description":"Lists Events for a domain when the organization has a current or retained Watch topic subscription; unentitled Entities return 404.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCIEventPage"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"RFC3339 or a relative 24h/30d window"},{"name":"until","in":"query","required":false,"schema":{"type":"string"},"description":"RFC3339 or a relative 24h/30d window"},{"name":"watch_id","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/entities/{domain}/history/{topic}":{"parameters":[{"name":"domain","in":"path","required":true,"description":"Canonical registrable domain.","schema":{"type":"string"}},{"name":"topic","in":"path","required":true,"schema":{"$ref":"#/components/schemas/WatchTopic"}}],"get":{"operationId":"companyHistoryRetrieve","tags":["companyChanges"],"summary":"Retrieve entitled Entity topic history","description":"Returns retained canonical topic history for an entitled Entity, including history older than a Watch; unentitled access returns 404.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCIHistoryEnvelope"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/events":{"get":{"operationId":"companyEventList","tags":["companyChanges"],"summary":"List entitled Company Changes events","description":"Lists canonical Events covered by the organization's current or retained Watch topic subscriptions.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCIEventPage"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"RFC3339 or a relative 24h/30d window"},{"name":"until","in":"query","required":false,"schema":{"type":"string"},"description":"RFC3339 or a relative 24h/30d window"},{"name":"entity","in":"query","required":false,"schema":{"type":"string"}},{"name":"watch_id","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/events/{id}":{"parameters":[{"name":"id","in":"path","required":true,"description":"Canonical Company Changes event ID: evt_ followed by 32 lowercase hex characters.","schema":{"type":"string","pattern":"^evt_[0-9a-f]{32}$"}}],"get":{"operationId":"companyEventRetrieve","tags":["companyChanges"],"summary":"Retrieve an entitled Company Changes event","description":"Returns an Event only when the organization is entitled; otherwise returns 404 without disclosure.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCIEventEnvelope"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/intelligence/{domain}":{"parameters":[{"name":"domain","in":"path","required":true,"description":"Canonical registrable domain.","schema":{"type":"string"}}],"get":{"operationId":"companyIntelligenceRetrieve","tags":["companyChanges"],"summary":"Retrieve entitled Company Changes intelligence","description":"Returns only entitled topic state and recent events plus shared coverage, never internal Entity scheduling.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCIIntelligenceEnvelope"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/monitors":{"post":{"operationId":"monitor_create","tags":["monitors"],"summary":"Create a monitor asynchronously","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreateRequest"}}}},"responses":{"200":{"description":"Idempotent replay: the same Idempotency-Key and request body already created this monitor. The existing monitor is returned instead of creating a duplicate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"202":{"description":"Monitor accepted. Initialization is asynchronous: the worker creates the private watch and the monitor becomes schedulable only after it exists, so next_run_at is omitted from the returned monitor and meta.initialization=\"pending\" names the ongoing initialization instead of implying an imminent run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this workspace (create/update/pause: 60 requests/min; get/list/history: 300 requests/min, configurable). Honor Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Degraded: the backend authorizer or rate-limit enforcement is temporarily unavailable (CodeDegraded), or webhook encryption is not configured (service_unavailable). Fail-closed; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"monitor_list","tags":["monitors"],"summary":"List monitors for the authenticated organization","security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorPage"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this workspace (create/update/pause: 60 requests/min; get/list/history: 300 requests/min, configurable). Honor Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Degraded: the backend authorizer or rate-limit enforcement is temporarily unavailable (CodeDegraded), or webhook encryption is not configured (service_unavailable). Fail-closed; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/monitors/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"monitor_get","tags":["monitors"],"summary":"Get a monitor","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"Unauthorized: missing, invalid, or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope (forbidden_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this workspace (create/update/pause: 60 requests/min; get/list/history: 300 requests/min, configurable). Honor Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Degraded: the backend authorizer or rate-limit enforcement is temporarily unavailable (CodeDegraded), or webhook encryption is not configured (service_unavailable). Fail-closed; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"monitor_update","tags":["monitors"],"summary":"Update frequency, pause state, or webhook","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorUpdateRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized: missing, invalid, or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope (forbidden_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this workspace (create/update/pause: 60 requests/min; get/list/history: 300 requests/min, configurable). Honor Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Degraded: the backend authorizer or rate-limit enforcement is temporarily unavailable (CodeDegraded), or webhook encryption is not configured (service_unavailable). Fail-closed; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Update frequency, pause state, or webhook configuration. The change is recorded immediately in the monitor service database (scheduling authority) and the external changedetection watch is reconciled asynchronously and with bounded retries; the response monitor object carries sync_state/sync_next_retry_at/sync_error_reason so a degraded engine (for example, a failed pause) is truthful and visible rather than silently dropped."}},"/v1/monitors/{id}/changes":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"monitor_changes","tags":["monitors"],"summary":"List monitor changes","security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorHistoryPage"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"Unauthorized: missing, invalid, or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope (forbidden_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this workspace (create/update/pause: 60 requests/min; get/list/history: 300 requests/min, configurable). Honor Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Degraded: the backend authorizer or rate-limit enforcement is temporarily unavailable (CodeDegraded), or webhook encryption is not configured (service_unavailable). Fail-closed; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/monitors/{id}/runs":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"monitor_runs","tags":["monitors"],"summary":"List monitor runs","security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorHistoryPage"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"Unauthorized: missing, invalid, or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope (forbidden_scope)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this workspace (create/update/pause: 60 requests/min; get/list/history: 300 requests/min, configurable). Honor Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Degraded: the backend authorizer or rate-limit enforcement is temporarily unavailable (CodeDegraded), or webhook encryption is not configured (service_unavailable). Fail-closed; retry later.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/watches":{"post":{"operationId":"watchCreate","tags":["watches"],"summary":"Create a Company Changes Watch","description":"Creates one non-archived Watch per organization and Entity. Duplicate creates return 409 watch_exists unless an exact Idempotency-Key replay is supplied. Existing retained history is reused and no baseline is fabricated. Topics default to all five and frequency to 24h. Webhook secrets are AES-256-GCM encrypted at rest and never returned.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Idempotency-Key replay","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchEnvelope"}}}},"201":{"description":"Watch created","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchEnvelope"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Key for replaying an identical create.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchCreateRequest"}}}}},"get":{"operationId":"watchList","tags":["watches"],"summary":"List Company Changes Watches","description":"Lists tenant-private Watches for the organization.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchPage"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"target","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/watches/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"watchRetrieve","tags":["watches"],"summary":"Retrieve a Company Changes Watch","description":"Returns a tenant-private Watch and shared Entity coverage.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchEnvelope"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"watchUpdate","tags":["watches"],"summary":"Update a Company Changes Watch","description":"Updates topics, requested_frequency, status, or webhook; the Entity/domain is immutable. Topic intervals never delete history. Archived is terminal and idempotent only for archiving; other changes return watch_archived. There is no public DELETE.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchEnvelope"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchUpdateRequest"}}}}}},"/v1/watches/{id}/events":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"watchEvents","tags":["watches"],"summary":"List events delivered to a Watch","description":"Returns canonical Events whose topic interval covered the Watch at detected_at and which were detected while it existed. Older or never-enabled history is available through Entity routes.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCIEventPage"}}}},"400":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Standard ReplyNodes error envelope","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"RFC3339 or a relative 24h/30d window"},{"name":"until","in":"query","required":false,"schema":{"type":"string"},"description":"RFC3339 or a relative 24h/30d window"}]}}}}