{"name":"com.replynodes/mcp","slug":"replynodes-mcp","title":"ReplyNodes","description":"Web MCP: scrape/crawl sites, web search, brand assets, app stores, YouTube, Reddit, Hacker News.","url":"https://mcp.market/server/replynodes-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"scraping","tags":["scraping","search","media"],"presence":{"score":30,"stars":4,"forks":0,"downloads_week":null,"last_push_at":"2026-09-27T09:47:17.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T04:40:49.210Z","last_ok_at":"2026-11-04T04:40:49.210Z","latency_ms":309},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/replynodes/replynodes-mcp","website":"https://replynodes.com/mcp","version":"1.0.3","remotes":[{"type":"streamable-http","url":"https://mcp.replynodes.com/mcp","headers":[{"description":"ReplyNodes API key sent as a Bearer token for authenticated access.","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"anonymous_brand","description":"Read public brand intelligence\n\nAlready-anonymous Brand gateway route for canonical capability brand-kit (fixed Tier A: 20 valid requests per trusted client-IP bucket per UTC calendar day). Domain validation occurs before admission; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp.\n\nHTTP: GET /{domain}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","pattern":"^[a-z0-9.-]+$","description":"path parameter"}},"required":["domain"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"anonymous_company_research","description":"Run the anonymous company-research workflow\n\nTop-level anonymous company-research workflow for canonical capability company-research (fixed Tier C: 3 valid requests per trusted client-IP bucket per UTC calendar day). A valid request is admitted once, before the read-only server-side fan-out; the url-to-markdown, brand-kit, and brand-logo primitives composed inside the workflow are server-owned and never charged a second anonymous bucket. Malformed input is rejected before admission; admitted provider failures consume one unit. X-RateLimit-Limit is 3, X-RateLimit-Remaining is the Tier C bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. Redis failure returns 503 degraded.\n\nHTTP: GET /v1/company-research","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"query parameter"}},"required":["domain"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"anonymous_competitor_research","description":"Run the anonymous competitor-research workflow\n\nTop-level anonymous competitor-research workflow for canonical capability competitor-research (fixed Tier C: 3 valid requests per trusted client-IP bucket per UTC calendar day). One admitted request fans out read-only to the company domain plus up to 5 competitor domains; the whole composition is charged once and primitives are never charged a second anonymous bucket. Malformed input (missing/invalid domain, empty/invalid/oversized competitor list) is rejected before admission. See /v1/company-research for the shared quota-header contract.\n\nHTTP: GET /v1/competitor-research","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"query parameter"},"competitors":{"type":"string","description":"query parameter"}},"required":["domain","competitors"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"anonymous_markdown","description":"Read a public URL as Markdown\n\nAlready-anonymous Markdown gateway route for canonical capability url-to-markdown (fixed Tier A: 20 valid requests per trusted client-IP bucket per UTC calendar day). Admission occurs after method and target/SSRF validation and before cache/upstream work; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. Redis failure returns 503 degraded.\n\nHTTP: GET /md/{target}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"target":{"type":"string","description":"path parameter"}},"required":["target"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"app","description":"Look up one public App Store application\n\nLook up one public App Store application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/appstore/app","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Numeric track id; provide this or appId."},"appId":{"type":"string","description":"Bundle id; provide this or id."},"country":{"type":"string","description":"Two-letter storefront code."},"lang":{"type":"string","description":"Language code."},"ratings":{"type":"boolean","description":"Include ratings information."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"appstore_app","description":"Read-only appstore app operation Normalized App records. Use when: you already have an App Store id or bundle id (from appstore_search or appstore_list) and need the full normalized app record: name, price, category, developer, description. Related tools: appstore_search, appstore_ratings, appstore_reviews, appstore_privacy.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string"},"country":{"type":"string"},"id":{"type":"string"},"lang":{"type":"string"},"ratings":{"type":"boolean"}}}},{"name":"appstore_developer","description":"Read-only appstore developer operation Normalized App records. Use when: listing every app a developer has published, given their App Store developer id. Related tools: appstore_app, appstore_search.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"country":{"type":"string"},"devId":{"type":"string"},"lang":{"type":"string"},"language":{"type":"string"}},"required":["devId"]}},{"name":"appstore_list","description":"Read-only appstore list operation Normalized App records. Use when: browsing a category or collection chart (top free, top grossing, new) instead of searching by keyword. Related tools: appstore_search, appstore_app.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string"},"collection":{"type":"string"},"country":{"type":"string"},"fullDetail":{"type":"boolean"},"lang":{"type":"string"},"language":{"type":"string"},"num":{"maximum":200,"minimum":1,"type":"integer"}}}},{"name":"appstore_privacy","description":"Read-only appstore privacy operation Privacy details envelope. Use when: auditing the data types an app declares collecting under Apple's privacy nutrition label, given its id. Related tools: appstore_app, appstore_ratings.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"appstore_ratings","description":"Read-only appstore ratings operation Ratings summary envelope. Use when: a quick average rating and star-count histogram for an app, without reading individual reviews. Related tools: appstore_reviews, appstore_app.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string"},"country":{"type":"string"},"id":{"type":"string"}}}},{"name":"appstore_reviews","description":"Read-only appstore reviews operation Review list envelope. Use when: reading paginated customer review text and scores for a specific app id — sentiment analysis, complaint mining, feature requests. Related tools: appstore_ratings, appstore_app.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string"},"country":{"type":"string"},"id":{"type":"string"},"page":{"maximum":10,"minimum":1,"type":"integer"},"sort":{"type":"string"}}}},{"name":"appstore_search","description":"Read-only appstore search operation Normalized App records. Use when: resolving a keyword or brand name to App Store app ids before looking up details, ratings, or reviews for a specific app. Related tools: appstore_suggest, appstore_app, appstore_similar.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"country":{"type":"string"},"idsOnly":{"type":"boolean"},"lang":{"type":"string"},"language":{"type":"string"},"num":{"maximum":50,"minimum":1,"type":"integer"},"page":{"maximum":200,"minimum":1,"type":"integer"},"term":{"type":"string"}},"required":["term"]}},{"name":"appstore_similar","description":"Read-only appstore similar operation Normalized App records. Use when: competitive discovery — surfacing apps the App Store considers similar to a known app id. Related tools: appstore_app, appstore_search.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string"},"country":{"type":"string"},"id":{"type":"string"},"lang":{"type":"string"}}}},{"name":"appstore_suggest","description":"Read-only appstore suggest operation Suggested search terms envelope. Use when: resolving a partial or fuzzy query into canonical App Store search terms before calling appstore_search. Related tools: appstore_search.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"term":{"type":"string"}},"required":["term"]}},{"name":"brand_fonts","description":"Get Fonts\n\nExtract the typography and font stack of a website by domain or URL.\n\nHTTP: GET /v1/brand/fonts","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required."},"url":{"type":"string","format":"uri","description":"One specific page URL to extract font information from instead of the whole domain."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"brand_logo","description":"Get Brand Logo\n\nFetch the brand logo kit for one company domain: primary logo URL, candidate logo variants, favicon, and og_image.\n\nHTTP: GET /v1/brand/logo","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to resolve, e.g. stripe.com. A bare domain only: no scheme, port, path, or credentials."}},"required":["domain"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"brand_retrieve","description":"Retrieve Brand\n\nResolve 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to resolve, e.g. apple.com. One of domain or url is required."},"url":{"type":"string","format":"uri","description":"One specific page URL to extract brand details from instead of the whole domain."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"brand_search","description":"Search Brand\n\nFuzzy 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Brand name or domain to search for."},"limit":{"type":"integer","minimum":1,"maximum":10,"description":"Maximum number of matches to return (default and maximum 10)."}},"required":["query"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"brand_styleguide","description":"Get Styleguide\n\nExtract the design system of a website by domain or URL: colors, typography, spacing, and more.\n\nHTTP: GET /v1/brand/styleguide","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required."},"url":{"type":"string","format":"uri","description":"One specific page URL to extract a styleguide from instead of the whole domain."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"developer","description":"List applications by developer\n\nList applications by developer. 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/developer","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"devId":{"type":"string","description":"public developer identifier."},"country":{"type":"string","description":"Two-letter storefront code."},"lang":{"type":"string","description":"Language code."}},"required":["devId"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_company_events","description":"List Company Changes events for an Entity\n\nLists 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Canonical registrable domain."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"query parameter"},"cursor":{"type":"string","description":"query parameter"},"topic":{"type":"string","description":"query parameter"},"type":{"type":"string","description":"query parameter"},"since":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"until":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"watch_id":{"type":"string","description":"query parameter"}},"required":["domain"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_company_history","description":"Retrieve entitled Entity topic history\n\nReturns 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}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Canonical registrable domain."},"topic":{"$ref":"#/$defs/WatchTopic","description":"path parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"query parameter"},"cursor":{"type":"string","description":"query parameter"}},"required":["domain","topic"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_company_intelligence","description":"Retrieve entitled Company Changes intelligence\n\nReturns only entitled topic state and recent events plus shared coverage, never internal Entity scheduling.\n\nHTTP: GET /v1/intelligence/{domain}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Canonical registrable domain."}},"required":["domain"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_fetcher_healthz","description":"Health check\n\nHTTP: GET /fetcher/healthz","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_fetcher_readyz","description":"Readiness (auth/db status)\n\nHTTP: GET /fetcher/readyz","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_recent_company_events","description":"List entitled Company Changes events\n\nLists canonical Events covered by the organization's current or retained Watch topic subscriptions.\n\nHTTP: GET /v1/events","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"query parameter"},"cursor":{"type":"string","description":"query parameter"},"topic":{"type":"string","description":"query parameter"},"type":{"type":"string","description":"query parameter"},"since":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"until":{"type":"string","description":"RFC3339 or a relative 24h/30d window"},"entity":{"type":"string","description":"query parameter"},"watch_id":{"type":"string","description":"query parameter"}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"get_v1_hackernews_capabilities","description":"List available operations\n\nHTTP: GET /v1/hackernews/capabilities","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_app_details","description":"Fetch a single Google Play app's public detail record\n\nFetch a single Google Play app's public detail record. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/app_details/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Google Play package id (e.g. com.nike.snkrs)."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_availability","description":"Fetch a Google Play app's per-storefront availability\n\nFetch a Google Play app's per-storefront availability. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/availability/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Google Play package id (e.g. com.nike.snkrs)."},"country":{"type":"string","description":"Two-letter storefront code."},"countries":{"type":"string","description":"Comma-separated storefront codes."},"language":{"type":"string","description":"Language code."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_categories","description":"List available Google Play category identifiers\n\nList available Google Play category identifiers. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/categories","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_category_apps","description":"Fetch top public apps in a Google Play category\n\nFetch top public apps in a Google Play category. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/category_apps/{category}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string","description":"Google Play category identifier (e.g. GAME, SHOPPING)."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of results; values outside 1..50 are rejected."}},"required":["category"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_data_safety","description":"Fetch a Google Play app's declared data-safety disclosure\n\nFetch a Google Play app's declared data-safety disclosure. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/data_safety/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Google Play package id (e.g. com.nike.snkrs)."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_developer","description":"Fetch public apps published by a Google Play developer\n\nFetch public apps published by a Google Play developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/developer","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dev_id":{"type":"string","description":"Google Play developer id."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of results; values outside 1..50 are rejected."}},"required":["dev_id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_permissions","description":"Fetch a Google Play app's declared permissions\n\nFetch a Google Play app's declared permissions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/permissions/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Google Play package id (e.g. com.nike.snkrs)."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_reviews","description":"Fetch public reviews for a Google Play app\n\nFetch public reviews for a Google Play app. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/reviews/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Google Play package id (e.g. com.nike.snkrs)."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of results; values outside 1..50 are rejected."},"sort":{"type":"integer","description":"Upstream review sort order."},"score":{"type":"integer","minimum":1,"maximum":5,"description":"Filter reviews to this star rating (1..5)."},"next_token":{"type":"string","description":"Pagination token from a previous reviews response."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_search","description":"Search public Google Play applications by term\n\nSearch 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"term":{"type":"string","description":"Search term."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of results; values outside 1..50 are rejected."}},"required":["term"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_similar_apps","description":"Fetch apps similar to a given Google Play package\n\nFetch apps similar to a given Google Play package. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/similar_apps/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Google Play package id (e.g. com.nike.snkrs)."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of results; values outside 1..50 are rejected."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"googleplay_suggest","description":"Fetch Google Play search-term suggestions\n\nFetch Google Play search-term suggestions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/googleplay/suggest","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"term":{"type":"string","description":"Search term."},"country":{"type":"string","description":"Two-letter storefront code."},"language":{"type":"string","description":"Language code."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of results; values outside 1..50 are rejected."}},"required":["term"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_item","description":"Fetch a single Hacker News item and its comment tree\n\nFetch a single Hacker News item and its comment tree. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/hackernews/item/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Hacker News item id."},"depth":{"type":"integer","minimum":1,"maximum":10,"description":"Maximum comment-tree depth to resolve; values outside 1..10 are rejected."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_search","description":"Search Hacker News via Algolia\n\nSearch 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"type":"string","description":"Search query."},"tags":{"type":"string","description":"Algolia HN Search tag filter (e.g. story, comment, ask_hn)."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":0,"description":"Result page."}},"required":["q"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_stories_ask","description":"Fetch current Ask HN stories\n\nFetch current Ask 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_ask","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":1,"description":"Result page."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_stories_best","description":"Fetch current Hacker News best stories\n\nFetch current Hacker News best stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/hackernews/stories_best","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":1,"description":"Result page."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_stories_job","description":"Fetch current Hacker News job postings\n\nFetch current Hacker News job postings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/hackernews/stories_job","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":1,"description":"Result page."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_stories_new","description":"Fetch current Hacker News new stories\n\nFetch current Hacker News new stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/hackernews/stories_new","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":1,"description":"Result page."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_stories_show","description":"Fetch current Show HN stories\n\nFetch 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":1,"description":"Result page."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_stories_top","description":"Fetch current Hacker News top stories\n\nFetch current Hacker News top stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/hackernews/stories_top","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"page":{"type":"integer","minimum":1,"description":"Result page."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"hackernews_user","description":"Fetch a public Hacker News user profile\n\nFetch a public Hacker News user profile. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/hackernews/user/{handle}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"handle":{"type":"string","description":"Hacker News username."}},"required":["handle"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"list","description":"List applications from an iTunes collection\n\nList 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"collection":{"type":"string","description":"Provider collection constant."},"category":{"type":"string","description":"Provider category constant."},"country":{"type":"string","description":"Two-letter storefront code."},"lang":{"type":"string","description":"Language code."},"num":{"type":"integer","minimum":1,"maximum":200,"description":"Number of applications; values outside 1..200 are rejected."},"fullDetail":{"type":"boolean","description":"Request detail enrichment."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"monitor_changes","description":"List monitor changes\n\nHTTP: GET /v1/monitors/{id}/changes","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"path parameter"},"cursor":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"monitor_create","description":"Create a monitor asynchronously\n\nHTTP: POST /v1/monitors","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"Idempotency-Key":{"type":"string","minLength":1,"description":"header parameter"},"body":{"$ref":"#/$defs/MonitorCreateRequest"}},"required":["Idempotency-Key","body"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"monitor_get","description":"Get a monitor\n\nHTTP: GET /v1/monitors/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"path parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"monitor_list","description":"List monitors for the authenticated organization\n\nHTTP: GET /v1/monitors","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cursor":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"query parameter"}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"monitor_runs","description":"List monitor runs\n\nHTTP: GET /v1/monitors/{id}/runs","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"path parameter"},"cursor":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"monitor_update","description":"Update frequency, pause state, or webhook\n\nUpdate frequency, pause state, or webhook configuration. The change is recorded immediately in the monitor service database (scheduling authority) and the external changedetection watch is reconciled asynchronously and with bounded retries; the response monitor object carries sync_state/sync_next_retry_at/sync_error_reason so a degraded engine (for example, a failed pause) is truthful and visible rather than silently dropped.\n\nHTTP: PATCH /v1/monitors/{id}","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"path parameter"},"body":{"$ref":"#/$defs/MonitorUpdateRequest"}},"required":["id","body"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"post_by_id","description":"HTTP: GET /v1/reddit/post_by_id/{id}","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"post_by_permalink","description":"HTTP: GET /v1/reddit/post_by_permalink","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"permalink":{"type":"string","description":"query parameter"}},"required":["permalink"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"privacy","description":"Read public App Store privacy details\n\nRead public App Store privacy details. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/appstore/privacy","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"public application identifier."}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"ratings","description":"Read public app ratings\n\nRead public app ratings. 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/ratings","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"public application identifier; provide this or appId."},"country":{"type":"string","description":"Two-letter storefront code."},"appId":{"type":"string","description":"Bundle id; provide this or id."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"read_document","description":"Read a public PDF as Markdown for AI agents\n\nDirect public HTTP POST to https://pdf.replynodes.com/ requires no account, API key, or cookie. POST converts one public PDF URL to Markdown. GET and HEAD on the root are documentation-only; allowed methods are GET, HEAD, POST. This PDF to Markdown response is designed for read PDF, PDF for AI agents, extract PDF text, and PDF context workflows. The MCP read_document / tools/call at https://mcp.replynodes.com/mcp requires the existing MCP authorization boundary; MCP is not anonymous. Limits: 10 MiB source/download, 50 pages, 60 seconds, 20 conversions/IP/hour, 2 active conversions/IP, and a maximum encoded JSON response of 1 MiB including the trailing newline. MCP discovery identifies the sole read_document tool at https://mcp.replynodes.com/mcp.\n\nHTTP: POST https://pdf.replynodes.com/","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","pattern":"^https?://","description":"Public PDF URL to read."}},"required":["url"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"reddit_post_by_id","description":"Read-only reddit post_by_id operation. One Reddit post plus its comment tree, looked up by post id. Use when: you already have a Reddit post id (from reddit_search_posts or reddit_subreddit_posts) and need the full post and comments. Related tools: reddit_post_by_permalink, reddit_subreddit_posts.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"reddit_post_by_permalink","description":"Read-only reddit post_by_permalink operation. One Reddit post plus its comment tree, looked up by permalink URL instead of a bare id. Use when: you have a full Reddit URL (e.g. pasted by a user) rather than a bare post id. Related tools: reddit_post_by_id.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"permalink":{"type":"string"}},"required":["permalink"]}},{"name":"reddit_search_posts","description":"Read-only reddit search_posts operation. Site-wide keyword search across Reddit posts. Use when: you don't yet know which subreddit holds relevant discussion and need to search across all of Reddit by keyword. Related tools: reddit_subreddit_posts, reddit_post_by_id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"maximum":100,"minimum":1,"type":"integer"},"query":{"type":"string"},"sort":{"type":"string"}},"required":["query"]}},{"name":"reddit_subreddit_posts","description":"Read-only reddit subreddit_posts operation. Listing of posts from one named subreddit, sorted by category (hot/new/top/...). Use when: you already know which subreddit to read and want its current listing rather than a keyword search. Related tools: reddit_search_posts, reddit_post_by_id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"subreddit":{"type":"string"},"time_filter":{"type":"string"}},"required":["subreddit"]}},{"name":"reddit_user_activity","description":"Read-only reddit user_activity operation. A Reddit user's recent posts and comments, interleaved by time. Use when: profiling a redditor's overall recent activity, not just the posts they authored. Related tools: reddit_user_posts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"maximum":100,"minimum":1,"type":"integer"},"username":{"type":"string"}},"required":["username"]}},{"name":"reddit_user_posts","description":"Read-only reddit user_posts operation. A Reddit user's submitted posts only (no comments), filterable by category and time window. Use when: you specifically want what a user posted, not their comments — narrower than reddit_user_activity. Related tools: reddit_user_activity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"time_filter":{"type":"string"},"username":{"type":"string"}},"required":["username"]}},{"name":"reviews","description":"Read a page of public app reviews\n\nRead a page of public app reviews. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/appstore/reviews","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"public application identifier; provide this or appId."},"appId":{"type":"string","description":"Bundle id; provide this or id."},"country":{"type":"string","description":"Two-letter storefront code."},"page":{"type":"integer","minimum":1,"maximum":10,"description":"Review page; values outside 1..10 are rejected."},"sort":{"type":"string","description":"Provider review sort constant."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"search","description":"Search public App Store applications by term\n\nSearch 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","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"term":{"type":"string","description":"Search term."},"num":{"type":"integer","minimum":1,"maximum":50,"description":"Number of results; values outside 1..50 are rejected."},"page":{"type":"integer","minimum":1,"maximum":200,"description":"Result page."},"country":{"type":"string","description":"Two-letter storefront code."},"lang":{"type":"string","description":"Language code."},"idsOnly":{"type":"boolean","description":"Return ids without detail lookups."}},"required":["term"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"search_posts","description":"HTTP: GET /v1/reddit/search_posts","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"query parameter"},"sort":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"query parameter"}},"required":["query"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"similar","description":"List apps related to an application\n\nList apps related to an application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/appstore/similar","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"public application identifier; provide this or appId."},"appId":{"type":"string","description":"Bundle id; provide this or id."}},"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"subreddit_posts","description":"HTTP: GET /v1/reddit/subreddit_posts/{subreddit}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"subreddit":{"type":"string","description":"path parameter"},"category":{"type":"string","description":"query parameter"},"time_filter":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"query parameter"}},"required":["subreddit"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"suggest","description":"Suggest public App Store search terms\n\nSuggest public App Store search terms. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.\n\nHTTP: GET /v1/appstore/suggest","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"term":{"type":"string","description":"Search term."}},"required":["term"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"user_activity","description":"HTTP: GET /v1/reddit/user_activity/{username}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"path parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"query parameter"}},"required":["username"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"user_posts","description":"HTTP: GET /v1/reddit/user_posts/{username}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"username":{"type":"string","description":"path parameter"},"category":{"type":"string","description":"query parameter"},"time_filter":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"query parameter"}},"required":["username"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"web_search","description":"Search the public web\n\nSearch the public web through the normalized Web Search provider contract.\n\nHTTP: GET /v1/web/search","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"Search query text."},"engines":{"type":"string","description":"Comma-separated search engines."},"lang":{"type":"string","description":"Language code."},"region":{"type":"string","description":"Search region."},"date":{"type":"string","description":"Provider date filter."},"site":{"type":"string","description":"Restrict results to a site or domain."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results; values outside 1..100 are rejected."},"start":{"type":"integer","minimum":0,"description":"Zero-based result offset."}},"required":["text"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"web_search_web_search","description":"Read-only web_search web_search operation Normalized public web-search results with title, URL, domain, snippet, favicon, engine, rank, and provenance metadata. Use when: you need general public web results for a query and don't already have a specific URL in hand; feed a resulting URL into webcontext_scrape to pull the actual page content. Related tools: webcontext_scrape, webcontext_crawl.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"date":{"type":"string"},"engines":{"type":"string"},"lang":{"type":"string"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"region":{"type":"string"},"site":{"type":"string"},"start":{"minimum":0,"type":"integer"},"text":{"type":"string"}},"required":["text"]}},{"name":"webcontext_brand","description":"Extract public brand identity for a site\n\nLightweight brand snapshot for one site URL: logos, colors, fonts, and basic public metadata. Prefer brand_retrieve for a fuller normalized brand profile or brand_search for fuzzy company-name discovery.\n\nHTTP: GET /v1/webcontext/brand","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address."}},"required":["url"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"webcontext_crawl","description":"Crawl same-origin links from a URL\n\nCrawl same-origin links starting from a URL and return normalized page results. max_pages/max_depth are clamped server-side regardless of the requested value.\n\nHTTP: GET /v1/webcontext/crawl","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address."},"max_pages":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum pages to crawl; clamped to 1..50."},"max_depth":{"type":"integer","minimum":1,"maximum":3,"description":"Maximum link depth; clamped to 1..3."}},"required":["url"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"webcontext_map","description":"Discover URLs belonging to a site\n\nDiscover URLs belonging to a site without extracting page content. Results are deduplicated.\n\nHTTP: GET /v1/webcontext/map","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address."}},"required":["url"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"webcontext_scrape","description":"Fetch one URL as clean Markdown\n\nFetch one URL and return clean, main-content Markdown plus normalized metadata, links, and images. Backed by a privately deployed webclaw-server instance; upstream implementation details are never exposed.\n\nHTTP: GET /v1/webcontext/scrape","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address."},"include_selectors":{"type":"string","description":"Comma-separated CSS selectors to include (e.g. \"article,.content\")."},"exclude_selectors":{"type":"string","description":"Comma-separated CSS selectors to exclude (e.g. \"nav,.sidebar,footer\")."}},"required":["url"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_channel","description":"HTTP: GET /v1/youtube/channel/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"},"language":{"type":"string","description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_comments","description":"HTTP: GET /v1/youtube/comments/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_playlist","description":"HTTP: GET /v1/youtube/playlist/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"},"language":{"type":"string","description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_related","description":"HTTP: GET /v1/youtube/related/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"},"language":{"type":"string","description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_search","description":"HTTP: GET /v1/youtube/search","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"term":{"type":"string","description":"query parameter"},"language":{"type":"string","description":"query parameter"},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"query parameter"}},"required":["term"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_transcript","description":"HTTP: GET /v1/youtube/transcript/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"},"language":{"type":"string","description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}},{"name":"youtube_video","description":"HTTP: GET /v1/youtube/video/{id}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"path parameter"},"language":{"type":"string","description":"query parameter"}},"required":["id"],"additionalProperties":false,"$defs":{"ResearchWorkflowData":{"type":"object","required":["workflow","domain","targets"],"properties":{"workflow":{"type":"string","enum":["company-research","competitor-research"]},"domain":{"type":"string"},"targets":{"type":"array","items":{"$ref":"#/$defs/ResearchWorkflowTarget"}}}},"ResearchWorkflowTarget":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"brand":{"type":"object","additionalProperties":true,"description":"Real brand-kit retrieve output; omitted when that primitive fails."},"styleguide":{"type":"object","additionalProperties":true},"logo":{"type":"object","additionalProperties":true},"markdown":{"type":"object","properties":{"content":{"type":"string"}}},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated."}}},"ResearchWorkflowResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/ResearchWorkflowData"},"meta":{"type":"object","additionalProperties":true}}},"RedditResponse":{"type":"object","additionalProperties":true},"BrandLogoData":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The snapshot target URL the logos were extracted from."},"brand":{"type":"object","properties":{"name":{"type":"string","description":"Public site/brand name detected on the page, when available."},"logo_url":{"type":"string","format":"uri","description":"Primary brand logo URL, when available."},"logos":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"Asset slot and format (e.g. logo.svg, favicon.ico)."},"url":{"type":"string","format":"uri"}}},"description":"Candidate logo variants detected on the page."},"favicon_url":{"type":"string","format":"uri"},"og_image":{"type":"string","format":"uri"}}}},"additionalProperties":false},"BrandLogoResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandLogoData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"AnonymousContinuation":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","const":"https://replynodes.com/auth.md"}}},"AnonymousQuotaError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id","continuation"],"properties":{"code":{"const":"anonymous_limit_reached"},"message":{"type":"string","example":"The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."},"request_id":{"type":"string"},"continuation":{"$ref":"#/$defs/AnonymousContinuation"}}}}},"Pagination":{"type":"object","properties":{"next_cursor":{"type":"string"},"has_more":{"type":"boolean"},"page":{"type":"integer"},"limit":{"type":"integer"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"},"contract_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"availability":{"type":"string"},"next_cursor":{"type":"string"},"missing_fields":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"}},"additionalProperties":true},"SuccessResponse":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"BrandFontsData":{"type":"object","required":["domain","url","count"],"properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0},"words_count":{"type":"integer","minimum":0,"description":"Word count reported by the rendered page metadata, when available."},"fonts":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":false},"BrandFontsResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$defs/BrandFontsData"},"meta":{"$ref":"#/$defs/ResponseMeta"}},"additionalProperties":false},"ErrorDetail":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","description":"Stable numeric ReplyNodes detail code. Emitted only for error codes that define one (currently source_excluded = 45101)."},"detail":{"type":"string","description":"Safe, actionable guidance. Emitted only for error codes that define it (currently source_excluded)."},"readme":{"type":"string","description":"Link to the published error documentation page. Reserved; absent until the docs page is live."}},"additionalProperties":false},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/$defs/ErrorDetail"}},"additionalProperties":false},"PaymentRequired":{"type":"object","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","enum":[2]},"error":{"type":"string"},"resource":{"type":"object","required":["url","mimeType"],"properties":{"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/PaymentRequirements"}},"extensions":{"oneOf":[{"$ref":"#/$defs/PaymentRequiredAccountlessExtensions"},{"$ref":"#/$defs/PaymentRequiredPrepaidExtensions"}]}},"additionalProperties":false},"PaymentRequiredAccountlessExtensions":{"type":"object","required":["x-replynodes-accountless"],"properties":{"x-replynodes-accountless":{"type":"object","required":["payment_mode","bearer_supported","prepaid_supported"],"properties":{"payment_mode":{"type":"string","enum":["x402_only"]},"bearer_supported":{"type":"boolean","enum":[false]},"prepaid_supported":{"type":"boolean","enum":[false]}},"additionalProperties":false}},"additionalProperties":false},"PaymentRequiredPrepaidExtensions":{"type":"object","required":["topup"],"properties":{"topup":{"type":"object","required":["topup_url"],"properties":{"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false}},"additionalProperties":false},"CreditTopupRequired":{"type":"object","required":["code","balance_micro","price_micro","topup_url"],"properties":{"code":{"type":"string","enum":["topup_required"]},"balance_micro":{"type":"integer"},"price_micro":{"type":"integer"},"topup_url":{"type":"string","enum":["/v1/billing/topup/intents"]}},"additionalProperties":false},"PaymentRequiredResponse":{"oneOf":[{"$ref":"#/$defs/PaymentRequired"},{"$ref":"#/$defs/CreditTopupRequired"}]},"PaymentRequirements":{"type":"object","required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"amount":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer"},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"MonitorWebhook":{"type":"object","required":["url"],"description":"Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged.","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true,"description":"HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."}}},"MonitorChangeEvent":{"type":"object","description":"Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document.","required":["event_version","event_id","event_type","monitor_id","run_id","detector","url","change_type","importance","summary","detected_at"],"properties":{"event_version":{"type":"integer","description":"Canonical envelope version. Receivers must branch on it."},"event_id":{"type":"string","format":"uuid","description":"Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."},"event_type":{"type":"string","enum":["monitor.change.detected"]},"monitor_id":{"type":"string","format":"uuid"},"run_id":{"type":"string","format":"uuid"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"url":{"type":"string","format":"uri","description":"Monitored public URL."},"change_type":{"type":"string","description":"Bounded detector change kind resolved by the detector/Jev judgement."},"importance":{"type":"string","enum":["low","medium","high"]},"summary":{"type":"string","description":"Bounded, page-content-free human summary."},"jev_confidence":{"type":"number","description":"Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."},"detected_at":{"type":"string","format":"date-time"},"evidence":{"type":"object","description":"Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"manifest_path":{"type":"string"},"manifest_sha256":{"type":"string"},"bytes":{"type":"integer","format":"int64"}}}}},"MonitorCreateRequest":{"type":"object","required":["url","detector","frequency"],"properties":{"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"webhook":{"$ref":"#/$defs/MonitorWebhook"}}},"MonitorUpdateRequest":{"type":"object","properties":{"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"webhook":{"anyOf":[{"$ref":"#/$defs/MonitorWebhook"},{"type":"null"}]}},"description":"Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."},"Monitor":{"type":"object","required":["id","url","detector","frequency","paused"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"detector":{"type":"string","enum":["price","saas_pricing","product_change"]},"frequency":{"type":"string","enum":["15m","1h","6h","12h","24h"]},"paused":{"type":"boolean"},"baseline_completed":{"type":"boolean"},"next_run_at":{"type":"string","format":"date-time","description":"Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"initialization_state":{"type":"string","enum":["pending","initializing","retryable","ready","failed"],"description":"Asynchronous changedetection watch initialization state"},"initialization_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable initialization"},"initialization_error_reason":{"type":"string","description":"Most recent changedetection initialization failure reason"},"webhook":{"allOf":[{"$ref":"#/$defs/MonitorWebhook"}],"description":"Secret is write-only and never returned"},"sync_state":{"type":"string","enum":["none","pending","running","retryable","failed","synced"],"description":"External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."},"sync_next_retry_at":{"type":"string","format":"date-time","description":"Next worker retry time for retryable engine watch reconciliation"},"sync_error_reason":{"type":"string","description":"Most recent changedetection engine watch reconciliation failure reason"}}},"MonitorPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Monitor"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"MonitorPageMeta":{"type":"object","required":["request_id","has_more"],"properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}}},"MonitorEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/$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."}}}}},"MonitorRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"baseline":{"type":"boolean"},"changed":{"type":"boolean"},"credits":{"type":"integer"}}},"MonitorHistoryPage":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/$defs/MonitorRun"}},"meta":{"$ref":"#/$defs/MonitorPageMeta"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}},"WatchTopic":{"type":"string","enum":["pricing","product","integrations","customers","positioning"]},"WatchFrequency":{"type":"string","enum":["24h","6h"]},"WatchStatus":{"type":"string","enum":["active","paused","archived"]},"WatchWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"secret":{"type":"string","writeOnly":true}},"required":["url","secret"],"additionalProperties":false},"WatchWebhookConfig":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"WatchCreateRequest":{"type":"object","properties":{"target":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":["target"],"additionalProperties":false},"WatchUpdateRequest":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"status":{"$ref":"#/$defs/WatchStatus"},"webhook":{"anyOf":[{"$ref":"#/$defs/WatchWebhook"},{"type":"null"}]}},"required":[],"additionalProperties":false},"WatchEntity":{"type":"object","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"}]}},"required":["id","domain","display_name","observed_since","last_observed_at"],"additionalProperties":false},"WatchCoverage":{"type":"object","properties":{"state":{"type":"string","enum":["initializing","healthy","degraded","failed"]},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","last_run_at"],"additionalProperties":false},"WatchTopicInterval":{"type":"object","properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"enabled_at":{"type":"string","format":"date-time"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["topic","enabled_at","disabled_at"],"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string"},"target":{"type":"string"},"entity":{"$ref":"#/$defs/WatchEntity"},"topics":{"type":"array","items":{"$ref":"#/$defs/WatchTopic"}},"requested_frequency":{"$ref":"#/$defs/WatchFrequency"},"effective_frequency":{"anyOf":[{"$ref":"#/$defs/WatchFrequency"},{"type":"null"}]},"status":{"$ref":"#/$defs/WatchStatus"},"started_at":{"type":"string","format":"date-time"},"status_changed_at":{"type":"string","format":"date-time"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"coverage":{"$ref":"#/$defs/WatchCoverage"},"topic_intervals":{"type":"array","items":{"$ref":"#/$defs/WatchTopicInterval"}},"webhook":{"$ref":"#/$defs/WatchWebhookConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","target","entity","topics","requested_frequency","effective_frequency","status","started_at","status_changed_at","archived_at","coverage","topic_intervals","created_at","updated_at"],"additionalProperties":false},"CCIMoney":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"period":{"type":"string"}},"required":["amount","currency","period"],"additionalProperties":false},"CCIEventData":{"type":"object","properties":{"plan":{"type":"string"},"old_price":{"$ref":"#/$defs/CCIMoney"},"new_price":{"$ref":"#/$defs/CCIMoney"},"price":{"$ref":"#/$defs/CCIMoney"},"billing_period":{"type":"string"},"name":{"type":"string"},"change_kind":{"type":"string"},"product":{"type":"string"},"surface":{"type":"string"},"category":{"type":"string"},"integration_name":{"type":"string"},"integration_domain":{"type":"string"},"action":{"type":"string"},"customer_name":{"type":"string"},"customer_domain":{"type":"string"},"case_study_url":{"type":"string"},"old_headline":{"type":"string"},"new_headline":{"type":"string"},"old_category":{"type":"string"},"new_category":{"type":"string"},"target_market_delta":{"type":"string"},"enterprise_messaging_added":{"type":"boolean"}},"required":[],"additionalProperties":false},"CCIConfidence":{"type":"object","properties":{"score":{"type":"number"},"calibrated":{"type":"boolean"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["score","calibrated","method"],"additionalProperties":false},"CCIEventEntity":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"CCIEventSource":{"type":"object","properties":{"page_ids":{"type":"array","items":{"type":"string"}},"urls":{"type":"array","items":{"type":"string"}}},"required":["page_ids","urls"],"additionalProperties":false},"CCIStateRef":{"type":"object","properties":{"state_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"state_version":{"anyOf":[{"type":"integer"},{"type":"null"}]},"snapshot_ids":{"type":"array","items":{"type":"string"}},"observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}}},"required":["state_id","state_version","snapshot_ids","observation_ids","content_hashes"],"additionalProperties":false},"CCIEventDetector":{"type":"object","properties":{"version":{"type":"string"},"extractor_version":{"type":"string"},"method":{"type":"string","enum":["deterministic","semantic"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"}},"required":["version","extractor_version","method","model","model_config_hash","provider","provider_version","provider_commit"],"additionalProperties":false},"CCIEventLineage":{"type":"object","properties":{"supersedes_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"retracted_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"lineage_event_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"correction_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["supersedes_event_id","retracted_event_id","lineage_event_id","correction_reason"],"additionalProperties":false},"CCIEvidence":{"type":"object","properties":{"id":{"type":"string"},"page_id":{"type":"string"},"source_url":{"type":"string"},"before_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_observation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"before_content_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"after_content_hash":{"type":"string"},"before_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"after_observed_at":{"type":"string","format":"date-time"},"before_excerpt":{"type":"string"},"after_excerpt":{"type":"string"},"extractor":{"type":"string"},"detector_version":{"type":"string"},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"method":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"model_config_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"fields":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","page_id","source_url","before_observation_id","after_observation_id","before_snapshot_id","after_snapshot_id","before_content_hash","after_content_hash","before_observed_at","after_observed_at","before_excerpt","after_excerpt","extractor","detector_version","provider","provider_version","provider_commit","method","model","model_config_hash","fields","created_at"],"additionalProperties":false},"CCIEvent":{"type":"object","properties":{"id":{"type":"string"},"schema_version":{"type":"integer"},"type":{"type":"string","enum":["pricing.price_changed","pricing.plan_added","pricing.plan_removed","product.launched","feature.launched","integration.added","integration.removed","customer.reference_added","case_study.added","positioning.changed"]},"topic":{"$ref":"#/$defs/WatchTopic"},"subject":{"type":"string"},"entity":{"$ref":"#/$defs/CCIEventEntity"},"summary":{"type":"string"},"status":{"type":"string","enum":["active","superseded","retracted"]},"detected_at":{"type":"string","format":"date-time"},"first_observed_at":{"type":"string","format":"date-time"},"previous_observed_at":{"type":"string","format":"date-time"},"current_observed_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/$defs/CCIEventData"},"source":{"$ref":"#/$defs/CCIEventSource"},"before":{"$ref":"#/$defs/CCIStateRef"},"after":{"$ref":"#/$defs/CCIStateRef"},"detector":{"$ref":"#/$defs/CCIEventDetector"},"confidence":{"$ref":"#/$defs/CCIConfidence"},"lineage":{"$ref":"#/$defs/CCIEventLineage"},"evidence":{"type":"array","items":{"$ref":"#/$defs/CCIEvidence"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","schema_version","type","topic","subject","entity","summary","status","detected_at","first_observed_at","previous_observed_at","current_observed_at","data","source","before","after","detector","confidence","lineage","evidence","created_at"],"additionalProperties":false},"CCITopicState":{"type":"object","properties":{"id":{"type":"string"},"topic":{"$ref":"#/$defs/WatchTopic"},"version":{"type":"integer"},"baseline":{"type":"boolean"},"state":{"type":"object","additionalProperties":true},"observed_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"valid_from":{"type":"string","format":"date-time"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extractor":{"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string"},"provider_version":{"type":"string"},"provider_commit":{"type":"string"},"derived_from_page_ids":{"type":"array","items":{"type":"string"}},"derived_from_snapshot_ids":{"type":"array","items":{"type":"string"}},"derived_from_observation_ids":{"type":"array","items":{"type":"string"}},"content_hashes":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","topic","version","baseline","state","observed_from","observed_to","valid_from","valid_to","extractor","method","model","provider","provider_version","provider_commit","derived_from_page_ids","derived_from_snapshot_ids","derived_from_observation_ids","content_hashes","created_at"],"additionalProperties":false},"CCIIntelligence":{"type":"object","properties":{"entity":{"$ref":"#/$defs/WatchEntity"},"coverage":{"$ref":"#/$defs/WatchCoverage"},"pages":{"type":"object","properties":{"monitored":{"type":"integer","minimum":0}},"required":["monitored"],"additionalProperties":false},"topics":{"type":"object","properties":{"pricing":{"$ref":"#/$defs/CCITopicState"},"product":{"$ref":"#/$defs/CCITopicState"},"integrations":{"$ref":"#/$defs/CCITopicState"},"customers":{"$ref":"#/$defs/CCITopicState"},"positioning":{"$ref":"#/$defs/CCITopicState"}},"required":[],"additionalProperties":false},"recent_events":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}}},"required":["entity","coverage","pages","topics","recent_events"],"additionalProperties":false},"CCIRequestMeta":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"],"additionalProperties":false},"CCIPageMeta":{"type":"object","properties":{"request_id":{"type":"string"},"next_cursor":{"type":"string"},"has_more":{"type":"boolean"}},"required":["request_id","next_cursor","has_more"],"additionalProperties":false},"WatchEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/Watch"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIEvent"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIIntelligenceEnvelope":{"type":"object","properties":{"data":{"$ref":"#/$defs/CCIIntelligence"},"meta":{"$ref":"#/$defs/CCIRequestMeta"}},"required":["data","meta"],"additionalProperties":false},"WatchPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/Watch"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIEventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/$defs/CCIEvent"}},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false},"CCIHistoryEnvelope":{"type":"object","properties":{"data":{"type":"object","additionalProperties":false,"properties":{"topic":{"$ref":"#/$defs/WatchTopic"},"current":{"anyOf":[{"$ref":"#/$defs/CCITopicState"},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/$defs/CCITopicState"}}},"required":["topic","current","history"]},"meta":{"$ref":"#/$defs/CCIPageMeta"}},"required":["data","meta"],"additionalProperties":false}}}}],"scan":{"score":85,"grade":"A","scanned_at":"2026-10-14T17:37:30.978Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-14T17:37:30.981Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 4802ms"]},"poisoning":{"score":15,"max":15,"notes":["70 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 17 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.replynodes.com/mcp","reachable":true,"authRequired":false,"latencyMs":4802,"serverInfo":{"name":"replynodes","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"replynodes","repo":"replynodes-mcp","archived":false,"pushedAt":"2026-09-27T09:47:17Z","stars":4,"forks":0,"openIssues":12,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/307085583?v=4","ownerCreatedAt":"2026-07-20T10:46:55Z","license":"MIT"},"icon":{"url":"https://replynodes.com/favicon.svg","source":"site"},"presence":{"stars":4,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-27T09:47:17.000Z","score":30}}}},"grade_history":[],"reviews":[]}