{"serverId":"mcp-registry/com.replynodes/mcp","tools":[{"name":"brand_retrieve","fixed":{"name":"brand_retrieve","description":"Retrieve Brand\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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.\n\nHTTP: GET /v1/brand/retrieve","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{"url":{"type":"string","format":"uri","description":"One specific page URL to extract brand details from instead of the whole domain."},"domain":{"type":"string","description":"Company domain to resolve, e.g. apple.com. One of domain or url is required."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11623,"tokensAfter":11623},{"name":"brand_search","fixed":{"name":"brand_search","description":"Search Brand\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Fuzzy brand or company search by name or domain; returns up to 10 lightweight matches with domain, name, and logo.\n\nHTTP: GET /v1/brand/search","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["query"],"properties":{"limit":{"type":"integer","maximum":10,"minimum":1,"description":"Maximum number of matches to return (default and maximum 10)."},"query":{"type":"string","description":"Brand name or domain to search for."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11590,"tokensAfter":11590},{"name":"get_company_events","fixed":{"name":"get_company_events","description":"List Company Changes events for an Entity\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Lists Events for a domain when the organization has a current or retained Watch topic subscription; unentitled Entities return 404.\n\nHTTP: GET /v1/entities/{domain}/events","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["domain"],"properties":{"type":{"type":"string","description":"query parameter"},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"query parameter"},"since":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"topic":{"type":"string","description":"query parameter"},"until":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"cursor":{"type":"string","description":"query parameter"},"domain":{"type":"string","description":"Canonical registrable domain."},"watch_id":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11707,"tokensAfter":11707},{"name":"get_company_history","fixed":{"name":"get_company_history","description":"Retrieve entitled Entity topic history\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Returns retained canonical topic history for an entitled Entity, including history older than a Watch; unentitled access returns 404.\n\nHTTP: GET /v1/entities/{domain}/history/{topic}","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["domain","topic"],"properties":{"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"query parameter"},"topic":{"$ref":"#/$defs/WatchTopic","description":"path parameter"},"cursor":{"type":"string","description":"query parameter"},"domain":{"type":"string","description":"Canonical registrable domain."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11639,"tokensAfter":11639},{"name":"get_company_intelligence","fixed":{"name":"get_company_intelligence","description":"Retrieve entitled Company Changes intelligence\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Returns only entitled topic state and recent events plus shared coverage, never internal Entity scheduling.\n\nHTTP: GET /v1/intelligence/{domain}","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["domain"],"properties":{"domain":{"type":"string","description":"Canonical registrable domain."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11567,"tokensAfter":11567},{"name":"get_fetcher_healthz","fixed":{"name":"get_fetcher_healthz","description":"Health check\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /fetcher/healthz","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11497,"tokensAfter":11497},{"name":"get_fetcher_readyz","fixed":{"name":"get_fetcher_readyz","description":"Readiness (auth/db status)\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /fetcher/readyz","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11500,"tokensAfter":11500},{"name":"get_gateway_capabilities","fixed":{"name":"get_gateway_capabilities","description":"Get gateway capabilities\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Callable discovery is a runtime snapshot, not authorization or billing state.\n\nHTTP: GET /v1/capabilities","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11524,"tokensAfter":11524},{"name":"get_recent_company_events","fixed":{"name":"get_recent_company_events","description":"List entitled Company Changes events\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Lists canonical Events covered by the organization's current or retained Watch topic subscriptions.\n\nHTTP: GET /v1/events","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{"type":{"type":"string","description":"query parameter"},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"query parameter"},"since":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"topic":{"type":"string","description":"query parameter"},"until":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"cursor":{"type":"string","description":"query parameter"},"entity":{"type":"string","description":"query parameter"},"watch_id":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11684,"tokensAfter":11684},{"name":"get_v1_hackernews_capabilities","fixed":{"name":"get_v1_hackernews_capabilities","description":"List available operations\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/hackernews/capabilities","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11507,"tokensAfter":11507},{"name":"googleplay_search","fixed":{"name":"googleplay_search","description":"Search public Google Play applications by term\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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.\n\nHTTP: GET /v1/googleplay/search","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["term"],"properties":{"term":{"type":"string","description":"Search term."},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of results; values outside 1..50 are rejected."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11651,"tokensAfter":11651},{"name":"hackernews_search","fixed":{"name":"hackernews_search","description":"Search Hacker News via Algolia\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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.\n\nHTTP: GET /v1/hackernews/search","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["q"],"properties":{"q":{"type":"string","description":"Search query."},"page":{"type":"integer","minimum":0,"description":"Result page."},"tags":{"type":"string","description":"Algolia HN Search tag filter (e.g. story, comment, ask_hn)."},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of results; values outside 1..100 are rejected."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11651,"tokensAfter":11651},{"name":"hackernews_stories_show","fixed":{"name":"hackernews_stories_show","description":"Fetch current Show HN stories\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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.\n\nHTTP: GET /v1/hackernews/stories_show","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{"page":{"type":"integer","minimum":1,"description":"Result page."},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of results; values outside 1..100 are rejected."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11607,"tokensAfter":11607},{"name":"list","fixed":{"name":"list","description":"List applications from an iTunes collection\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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.\n\nHTTP: GET /v1/appstore/list","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{"num":{"type":"integer","maximum":200,"minimum":1,"description":"Number of applications; values outside 1..200 are rejected."},"lang":{"type":"string","description":"Language code."},"country":{"type":"string","description":"Two-letter storefront code."},"category":{"type":"string","description":"Provider category constant."},"collection":{"type":"string","description":"Provider collection constant."},"fullDetail":{"type":"boolean","description":"Request detail enrichment."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11685,"tokensAfter":11685},{"name":"monitor_create","fixed":{"name":"monitor_create","description":"Create a monitor asynchronously\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: POST /v1/monitors","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["Idempotency-Key","body"],"properties":{"body":{"$ref":"#/$defs/MonitorCreateRequest"},"Idempotency-Key":{"type":"string","minLength":1,"description":"header parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":11547,"tokensAfter":11547},{"name":"monitor_get","fixed":{"name":"monitor_get","description":"Get a monitor\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/monitors/{id}","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["id"],"properties":{"id":{"type":"string","format":"uuid","description":"path parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11520,"tokensAfter":11520},{"name":"monitor_list","fixed":{"name":"monitor_list","description":"List monitors for the authenticated organization\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/monitors","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"properties":{"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"query parameter"},"cursor":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11547,"tokensAfter":11547},{"name":"monitor_runs","fixed":{"name":"monitor_runs","description":"List monitor runs\n\nMCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/monitors/{id}/runs","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["id"],"properties":{"id":{"type":"string","format":"uuid","description":"path parameter"},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"query parameter"},"cursor":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":11566,"tokensAfter":11566},{"name":"monitor_update","fixed":{"name":"monitor_update","description":"Update frequency, pause state, or webhook\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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 an","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["id","body"],"properties":{"id":{"type":"string","format":"uuid","description":"path parameter"},"body":{"$ref":"#/$defs/MonitorUpdateRequest"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":11643,"tokensAfter":11643},{"name":"post_by_id","fixed":{"name":"post_by_id","description":"MCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/reddit/post_by_id/{id}","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["id"],"properties":{"id":{"type":"string","description":"path parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":11513,"tokensAfter":11513},{"name":"post_by_permalink","fixed":{"name":"post_by_permalink","description":"MCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/reddit/post_by_permalink","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["permalink"],"properties":{"permalink":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":11519,"tokensAfter":11519},{"name":"read_document","fixed":{"name":"read_document","description":"Read a public PDF as Markdown for AI agents\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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. Limits: 10 MiB source/download, 50 pages, 60 seconds, 20 conversions/IP/hour, 2 active conversions/IP, and a maximum encoded JSON respon","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["url"],"properties":{"url":{"type":"string","format":"uri","pattern":"^https?://","description":"Public PDF URL to read."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11637,"tokensAfter":11637},{"name":"search","fixed":{"name":"search","description":"Search public App Store applications by term\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. 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.\n\nHTTP: GET /v1/appstore/search","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["term"],"properties":{"num":{"type":"integer","maximum":50,"minimum":1,"description":"Number of results; values outside 1..50 are rejected."},"lang":{"type":"string","description":"Language code."},"page":{"type":"integer","maximum":200,"minimum":1,"description":"Result page."},"term":{"type":"string","description":"Search term."},"country":{"type":"string","description":"Two-letter storefront code."},"idsOnly":{"type":"boolean","description":"Return ids without detail lookups."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11687,"tokensAfter":11687},{"name":"search_posts","fixed":{"name":"search_posts","description":"MCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/reddit/search_posts","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["query"],"properties":{"sort":{"type":"string","description":"query parameter"},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"query parameter"},"query":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11554,"tokensAfter":11554},{"name":"subreddit_posts","fixed":{"name":"subreddit_posts","description":"MCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/reddit/subreddit_posts/{subreddit}","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["subreddit"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1,"description":"query parameter"},"category":{"type":"string","description":"query parameter"},"subreddit":{"type":"string","description":"path parameter"},"time_filter":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":11580,"tokensAfter":11580},{"name":"user_posts","fixed":{"name":"user_posts","description":"MCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/reddit/user_posts/{username}","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["username"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1,"description":"query parameter"},"category":{"type":"string","description":"query parameter"},"username":{"type":"string","description":"path parameter"},"time_filter":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":11576,"tokensAfter":11576},{"name":"web_search","fixed":{"name":"web_search","description":"Search the public web\n\nMCP tool calls require a ReplyNodes API key or OAuth access token. Search the public web through the normalized Web Search provider contract.\n\nHTTP: GET /v1/web/search","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["text"],"properties":{"date":{"type":"string","description":"Provider date filter."},"lang":{"type":"string","description":"Language code."},"site":{"type":"string","description":"Restrict results to a site or domain."},"text":{"type":"string","description":"Search query text."},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of results; values outside 1..100 are rejected."},"start":{"type":"integer","minimum":0,"description":"Zero-based result offset."},"region":{"type":"string","description":"Search region."},"engines":{"type":"string","description":"Comma-separated search engines."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11691,"tokensAfter":11691},{"name":"youtube_search","fixed":{"name":"youtube_search","description":"MCP tool calls require a ReplyNodes API key or OAuth access token.\n\nHTTP: GET /v1/youtube/search","inputSchema":{"type":"object","$defs":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"Watch":{"type":"object","required":["id","target","entity","topics","unavailable_topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"properties":{"id":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"status":{"$ref":"#/$defs/WatchStatus"},"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"status_changed_at":{"type":"string","format":"date-time"},"unavailable_topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"},"description":"Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"paused":{"type":"boolean"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"},"created_at":{"type":"string","format":"date-time"},"sync_state":{"enum":["none","pending","running","retryable","failed","synced"],"type":"string","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."},"updated_at":{"type":"string","format":"date-time"},"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."},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"},"baseline_completed":{"type":"boolean"},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"initialization_state":{"enum":["pending","initializing","retryable","ready","failed"],"type":"string","description":"Asynchronous changedetection watch initialization state"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"}}},"CCIEvent":{"type":"object","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"],"properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/CCIEventData"},"type":{"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"],"type":"string"},"after":{"$ref":"#/$defs/CCIStateRef"},"topic":{"$ref":"#/$defs/WatchTopic"},"before":{"$ref":"#/$defs/CCIStateRef"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"source":{"$ref":"#/$defs/CCIEventSource"},"status":{"enum":["active","superseded","retracted"],"type":"string"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"subject":{"type":"string"},"summary":{"type":"string"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"confidence":{"$ref":"#/$defs/CCIConfidence"},"created_at":{"type":"string","format":"date-time"},"detected_at":{"type":"string","format":"date-time"},"schema_version":{"type":"integer"},"first_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CCIMoney":{"type":"object","required":["amount","currency","period"],"properties":{"amount":{"type":"number"},"period":{"type":"string"},"currency":{"type":"string"}},"additionalProperties":false},"WatchPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string"},"changed":{"type":"boolean"},"credits":{"type":"integer"},"baseline":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}},"additionalProperties":true},"WatchTopic":{"enum":["pricing","product","integrations","customers","positioning"],"type":"string"},"AppResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"description":"Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"description":"Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.","additionalProperties":false},"CCIEvidence":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"method":{"type":"string"},"page_id":{"type":"string"},"provider":{"type":"string"},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source_url":{"type":"string"},"after_excerpt":{"type":"string"},"before_excerpt":{"type":"string"},"provider_commit":{"type":"string"},"detector_version":{"type":"string"},"provider_version":{"type":"string"},"after_observed_at":{"type":"string","format":"date-time"},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIPageMeta":{"type":"object","required":["request_id","next_cursor","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}},"additionalProperties":false},"CCIStateRef":{"type":"object","required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":false},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchEntity":{"type":"object","required":["id","domain","display_name","observed_since","last_observed_at"],"properties":{"id":{"type":"string"},"domain":{"type":"string"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"observed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchStatus":{"enum":["active","paused","archived"],"type":"string"},"CCIEventData":{"type":"object","required":[],"properties":{"name":{"type":"string"},"plan":{"type":"string"},"price":{"$ref":"#/$defs/CCIMoney"},"action":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"new_price":{"$ref":"#/$defs/CCIMoney"},"old_price":{"$ref":"#/$defs/CCIMoney"},"change_kind":{"type":"string"},"new_category":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"old_headline":{"type":"string"},"customer_name":{"type":"string"},"billing_period":{"type":"string"},"case_study_url":{"type":"string"},"customer_domain":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"additionalProperties":false},"CCIEventPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"RegistryData":{"type":"object","required":["schema_version","service","version","documentVersion","documentHash","document","providers","callable_routes","openapi"],"properties":{"openapi":{"$ref":"#/$defs/RegistryOpenAPI"},"service":{"type":"string"},"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"providers":{"type":"array","items":{"$ref":"#/$defs/RegistryProvider"}},"documentHash":{"type":"string"},"schema_version":{"enum":["v1"],"type":"string"},"callable_routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"documentVersion":{"type":"string"}},"additionalProperties":false},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":true},"WatchWebhook":{"type":"object","required":["url","secret"],"properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"additionalProperties":false},"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."},"logos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."}}},"description":"Candidate logo variants detected on the page."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"og_image":{"type":"string","format":"uri"},"favicon_url":{"type":"string","format":"uri"}}}},"additionalProperties":false},"CCIConfidence":{"type":"object","required":["score","calibrated","method"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"method":{"type":"string"},"calibrated":{"type":"boolean"}},"additionalProperties":false},"CCITopicState":{"type":"object","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"],"properties":{"id":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"object","additionalProperties":true},"topic":{"$ref":"#/$defs/WatchTopic"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"type":"integer"},"baseline":{"type":"boolean"},"provider":{"type":"string"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"valid_from":{"type":"string","format":"date-time"},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"content_hashes":{"type":"array","items":{"type":"string"}},"provider_commit":{"type":"string"},"provider_version":{"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"}}},"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"readme":{"type":"string"},"reason":{"type":"string"},"status":{"type":"integer"},"message":{"type":"string"},"retryable":{"type":"boolean"},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}},"additionalProperties":false}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"RegistryRoute":{"type":"object","required":["provider","route","method","status","callable","auth_required","read_only","billing"],"properties":{"tag":{"type":"string"},"route":{"type":"string"},"method":{"enum":["GET"],"type":"string"},"status":{"type":"string"},"billing":{"$ref":"#/$defs/RegistryBilling"},"callable":{"type":"boolean"},"provider":{"type":"string"},"read_only":{"type":"boolean"},"schema_ref":{"type":"string"},"operation_id":{"type":"string"},"auth_required":{"type":"boolean"}},"additionalProperties":false},"WatchCoverage":{"type":"object","required":["state","last_run_at"],"properties":{"state":{"enum":["initializing","healthy","degraded","failed"],"type":"string"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}},"domain":{"type":"string"},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."}},"additionalProperties":false},"CCIEventEntity":{"type":"object","required":["id","domain"],"properties":{"id":{"type":"string"},"domain":{"type":"string"}},"additionalProperties":false},"CCIEventSource":{"type":"object","required":["page_ids","urls"],"properties":{"urls":{"type":"array","items":{"type":"string"}},"page_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CCIRequestMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"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."}},"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."},"RedditResponse":{"type":"object","additionalProperties":true},"WatchFrequency":{"enum":["24h","6h"],"type":"string"},"CCIEventLineage":{"type":"object","required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"properties":{"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIIntelligence":{"type":"object","required":["entity","coverage","pages","topics","recent_events"],"properties":{"pages":{"type":"object","required":["monitored"],"properties":{"monitored":{"type":"integer","minimum":0}},"additionalProperties":false},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"object","required":[],"properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"}},"additionalProperties":false},"coverage":{"$ref":"#/$defs/WatchCoverage"},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"additionalProperties":false},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/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."}}}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"has_more":{"type":"boolean"},"request_id":{"type":"string"},"next_cursor":{"type":"string"}}},"RegistryBilling":{"type":"object","required":["metered"],"properties":{"metered":{"type":"boolean"},"credit_cost":{"type":"integer","format":"int64","minimum":0}},"additionalProperties":false},"RegistryOpenAPI":{"type":"object","required":["version","document_hash","document"],"properties":{"version":{"type":"string"},"document":{"type":"object","description":"The embedded OpenAPI document served unchanged."},"document_hash":{"type":"string"}},"additionalProperties":false},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"CCIEventDetector":{"type":"object","required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"enum":["deterministic","semantic"],"type":"string"},"version":{"type":"string"},"provider":{"type":"string"},"provider_commit":{"type":"string"},"provider_version":{"type":"string"},"extractor_version":{"type":"string"},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"CCIEventEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"RegistryProvider":{"type":"object","required":["slug","name","description","status","routes"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/$defs/RegistryRoute"}},"status":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"RegistryResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/RegistryData"},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}},"additionalProperties":true}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"MarkdownHostError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","reason","retryable"],"properties":{"code":{"enum":["invalid_request","not_found","method_not_allowed","anonymous_limit_reached","source_excluded","upstream_blocked","upstream_unavailable","degraded","gateway_timeout","internal_error"],"type":"string"},"detail":{"type":"string","description":"Safe caller guidance; present only for source_excluded."},"reason":{"enum":["empty_target","bad_scheme","malformed_url","target_too_long","target_not_allowed","target_rejected","bad_option","route_disabled","target_not_found","method_not_allowed","daily_limit","publisher_excluded","access_check","target_unreachable","empty_content","content_too_large","provider_unavailable","service_degraded","target_timeout","client_closed","internal_error"],"type":"string","description":"Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."},"status":{"type":"integer","description":"Stable numeric detail code; present only for source_excluded (45101)."},"message":{"type":"string"},"retryable":{"type":"boolean","description":"True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandRetrieveAsset":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}}},"BrandRetrieveColor":{"type":"object","required":["hex"],"properties":{"hex":{"type":"string"},"count":{"type":"integer","format":"int64"},"usage":{"type":"string"}}},"CCIHistoryEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["topic","current","history"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"additionalProperties":false},"MonitorChangeEvent":{"type":"object","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"url":{"type":"string","format":"uri","description":"Monitored public URL."},"run_id":{"type":"string","format":"uuid"},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"evidence":{"type":"object","properties":{"bytes":{"type":"integer","format":"int64"},"commit":{"type":"string"},"repository":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"}},"description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."},"event_type":{"enum":["monitor.change.detected"],"type":"string"},"importance":{"enum":["low","medium","high"],"type":"string"},"monitor_id":{"type":"string","format":"uuid"},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"detected_at":{"type":"string","format":"date-time"},"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."}},"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."},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"WatchCreateRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchTopicInterval":{"type":"object","required":["topic","enabled_at","disabled_at"],"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"additionalProperties":false},"WatchUpdateRequest":{"type":"object","required":[],"properties":{"status":{"$ref":"#/$defs/WatchStatus"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"}},"additionalProperties":false},"WatchWebhookConfig":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false},"WebContextMetadata":{"type":"object","required":["title","description","author","image","favicon","language","published_date","site_name","word_count","url"],"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"published_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false},"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":"#/$defs/AnonymousContinuation"}}}}},"BrandSearchResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["query","count","matches"],"properties":{"count":{"type":"integer"},"query":{"type":"string"},"matches":{"anyOf":[{"type":"array","items":{"type":"object","required":["domain"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"favicon":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"enum":["topup_required"],"type":"string"},"message":{"type":"string"},"upgrade":{"type":"object","required":["url","plans","pricing"],"properties":{"url":{"type":"string","format":"uri"},"plans":{"type":"array","items":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"pricing":{"type":"string","format":"uri"}},"additionalProperties":false},"topup_url":{"type":"string","format":"uri","description":"Owner billing page for managing prepaid credits."},"price_micro":{"type":"integer"},"balance_micro":{"type":"integer"}},"additionalProperties":false},"GatewayResponseMeta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}},"additionalProperties":false},"MarkdownJsonResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"type":["string","null"]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"type":"string"},"metadata":{"type":"object","properties":{"url":{"type":["string","null"]},"image":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"favicon":{"type":["string","null"]},"language":{"type":["string","null"]},"site_name":{"type":["string","null"]},"word_count":{"type":["integer","null"]},"description":{"type":["string","null"]},"published_date":{"type":["string","null"]}}}}},"meta":{"type":"object","required":["request_id","generated_at"],"properties":{"request_id":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Time the page was fetched (the cached time on a cache hit)."}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"webhook":{"$ref":"#/$defs/MonitorWebhook"},"detector":{"enum":["price","saas_pricing","product_change"],"type":"string"},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}}},"MonitorUpdateRequest":{"type":"object","properties":{"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]},"frequency":{"enum":["15m","1h","6h","12h","24h"],"type":"string"}},"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."},"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}},"workflow":{"enum":["company-research","competitor-research"],"type":"string"}}},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","const":"https://replynodes.com/auth.md","format":"uri"}}},"BrandRetrieveResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url"],"properties":{"url":{"type":"string"},"name":{"type":"string"},"fonts":{"type":"array","items":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"colors":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveColor"}},"domain":{"type":"string"},"favicon":{"type":"string"},"og_image":{"type":"string"},"backdrops":{"type":"array","items":{"$ref":"#/$defs/BrandRetrieveAsset"}},"description":{"type":"string"},"primary_logo":{"type":"string"},"social_links":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","required":["request_id"],"properties":{"stale":{"type":"boolean"},"detail":{"type":"string"},"request_id":{"type":"string"},"next_cursor":{"type":"string"},"availability":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"missing_fields":{"type":"array","items":{"type":"string"}},"contract_version":{"type":"string"}}}}},"WebContextMapResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","count","urls"],"properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"logo":{"type":"object","additionalProperties":true},"brand":{"type":"object","description":"Real brand-kit retrieve output; omitted when that primitive fails.","additionalProperties":true},"domain":{"type":"string"},"errors":{"type":"object","description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.","additionalProperties":{"type":"string"}},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"styleguide":{"type":"object","additionalProperties":true}}},"BrandStyleguideResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["domain","url","status"],"properties":{"url":{"type":"string"},"card":{"type":"object","required":["source"],"properties":{"border":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"background":{"type":"string"},"box_shadow":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false},"mode":{"type":"string"},"radii":{"type":"array","items":{"type":"string"}},"colors":{"type":"array","items":{"type":"object","required":["value","source"],"properties":{"role":{"type":"string"},"count":{"type":"integer"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":false}},"domain":{"type":"string"},"status":{"type":"string"},"buttons":{"type":"array","items":{"type":"object","required":["variant","source"],"properties":{"color":{"type":"string"},"source":{"type":"string"},"padding":{"type":"string"},"variant":{"type":"string"},"background":{"type":"string"},"font_weight":{"type":"string"},"border_radius":{"type":"string"}},"additionalProperties":false}},"shadows":{"type":"array","items":{"type":"string"}},"spacing":{"type":"array","items":{"type":"string"}},"typography":{"type":"array","items":{"type":"object","required":["source"],"properties":{"tag":{"type":"string"},"size":{"type":"string"},"usage":{"type":"string"},"family":{"type":"string"},"source":{"type":"string"},"weight":{"type":"string"},"line_height":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"additionalProperties":false},"WebContextBrandResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","brand"],"properties":{"url":{"type":"string"},"brand":{"type":"object","required":["name","logo_url","logos","colors","fonts","favicon_url","og_image"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"fonts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"logos":{"anyOf":[{"type":"array","items":{"type":"object","required":["kind","url"],"properties":{"url":{"type":"string"},"kind":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","required":["hex","usage","count"],"properties":{"hex":{"type":"string"},"count":{"type":"integer"},"usage":{"type":"string"}},"additionalProperties":false}},{"type":"null"}]},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}]},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":false}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"WebContextCrawlResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","total","completed","errors","pages"],"properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","required":["url","depth","title","markdown","metadata"],"properties":{"url":{"type":"string"},"depth":{"type":"integer"},"error":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"}},"additionalProperties":false}},"total":{"type":"integer"},"errors":{"type":"integer"},"completed":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"WebContextScrapeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["url","title","markdown","metadata","links","images","truncated","markdown_chars"],"properties":{"url":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"images":{"type":"array","items":{"type":"string"}},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"$ref":"#/$defs/WebContextMetadata"},"truncated":{"type":"boolean"},"markdown_chars":{"type":"integer"}},"additionalProperties":false},"meta":{"$ref":"#/$defs/GatewayResponseMeta"}},"additionalProperties":false}},"required":["term"],"properties":{"term":{"type":"string","description":"query parameter"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"query parameter"},"language":{"type":"string","description":"query parameter"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":11553,"tokensAfter":11553}],"toolsChanged":28,"tokensSaved":0,"todo":[{"tool":"monitor_create","params":["body"]},{"tool":"monitor_update","params":["body"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}