Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,545Letters: 14Defects: 1,324counted 1 min ago
teppi

Server definition

Hash
sha256:f411794ef697fcc8da982aee2406c70202b42daf83a907c2115e2fe72d5b3cc7
What it is
What a remote MCP server returned when asked what it offers: 66 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "appId": { "description": "Bundle id; provide this or id.", "type": "string" }, "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Numeric track id; provide this or appId.", "type": "string" }, "lang": { "description": "Language code.", "type": "string" }, "ratings": { "description": "Include ratings information.", "type": "boolean" } }, "type": "object" }, "name": "app", "outputSchema": null }, { "description": "Get Fonts\n\nExtract the typography and font stack of a website by domain or URL.\n\nHTTP: GET /v1/brand/fonts", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "domain": { "description": "Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required.", "type": "string" }, "url": { "description": "One specific page URL to extract font information from instead of the whole domain.", "format": "uri", "type": "string" } }, "type": "object" }, "name": "brand_fonts", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "domain": { "description": "Company domain to resolve, e.g. stripe.com. A bare domain only: no scheme, port, path, or credentials.", "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "brand_logo", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "domain": { "description": "Company domain to resolve, e.g. apple.com. One of domain or url is required.", "type": "string" }, "url": { "description": "One specific page URL to extract brand details from instead of the whole domain.", "format": "uri", "type": "string" } }, "type": "object" }, "name": "brand_retrieve", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of matches to return (default and maximum 10).", "maximum": 10, "minimum": 1, "type": "integer" }, "query": { "description": "Brand name or domain to search for.", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "brand_search", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "domain": { "description": "Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required.", "type": "string" }, "url": { "description": "One specific page URL to extract a styleguide from instead of the whole domain.", "format": "uri", "type": "string" } }, "type": "object" }, "name": "brand_styleguide", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "devId": { "description": "public developer identifier.", "type": "string" }, "lang": { "description": "Language code.", "type": "string" } }, "required": [ "devId" ], "type": "object" }, "name": "developer", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "cursor": { "description": "query parameter", "type": "string" }, "domain": { "description": "Canonical registrable domain.", "type": "string" }, "limit": { "default": 20, "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "since": { "description": "RFC3339 or a relative 24h/30d window", "type": "string" }, "topic": { "description": "query parameter", "type": "string" }, "type": { "description": "query parameter", "type": "string" }, "until": { "description": "RFC3339 or a relative 24h/30d window", "type": "string" }, "watch_id": { "description": "query parameter", "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_company_events", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "cursor": { "description": "query parameter", "type": "string" }, "domain": { "description": "Canonical registrable domain.", "type": "string" }, "limit": { "default": 20, "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "topic": { "$ref": "#/$defs/WatchTopic", "description": "path parameter" } }, "required": [ "domain", "topic" ], "type": "object" }, "name": "get_company_history", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "domain": { "description": "Canonical registrable domain.", "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_company_intelligence", "outputSchema": null }, { "description": "Health check\n\nHTTP: GET /fetcher/healthz", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": {}, "type": "object" }, "name": "get_fetcher_healthz", "outputSchema": null }, { "description": "Readiness (auth/db status)\n\nHTTP: GET /fetcher/readyz", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": {}, "type": "object" }, "name": "get_fetcher_readyz", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "cursor": { "description": "query parameter", "type": "string" }, "entity": { "description": "query parameter", "type": "string" }, "limit": { "default": 20, "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "since": { "description": "RFC3339 or a relative 24h/30d window", "type": "string" }, "topic": { "description": "query parameter", "type": "string" }, "type": { "description": "query parameter", "type": "string" }, "until": { "description": "RFC3339 or a relative 24h/30d window", "type": "string" }, "watch_id": { "description": "query parameter", "type": "string" } }, "type": "object" }, "name": "get_recent_company_events", "outputSchema": null }, { "description": "List available operations\n\nHTTP: GET /v1/hackernews/capabilities", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": {}, "type": "object" }, "name": "get_v1_hackernews_capabilities", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Google Play package id (e.g. com.nike.snkrs).", "type": "string" }, "language": { "description": "Language code.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "googleplay_app_details", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "countries": { "description": "Comma-separated storefront codes.", "type": "string" }, "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Google Play package id (e.g. com.nike.snkrs).", "type": "string" }, "language": { "description": "Language code.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "googleplay_availability", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "language": { "description": "Language code.", "type": "string" } }, "type": "object" }, "name": "googleplay_categories", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "category": { "description": "Google Play category identifier (e.g. GAME, SHOPPING).", "type": "string" }, "country": { "description": "Two-letter storefront code.", "type": "string" }, "language": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" } }, "required": [ "category" ], "type": "object" }, "name": "googleplay_category_apps", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Google Play package id (e.g. com.nike.snkrs).", "type": "string" }, "language": { "description": "Language code.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "googleplay_data_safety", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "dev_id": { "description": "Google Play developer id.", "type": "string" }, "language": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" } }, "required": [ "dev_id" ], "type": "object" }, "name": "googleplay_developer", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Google Play package id (e.g. com.nike.snkrs).", "type": "string" }, "language": { "description": "Language code.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "googleplay_permissions", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Google Play package id (e.g. com.nike.snkrs).", "type": "string" }, "language": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" }, "next_token": { "description": "Pagination token from a previous reviews response.", "type": "string" }, "score": { "description": "Filter reviews to this star rating (1..5).", "maximum": 5, "minimum": 1, "type": "integer" }, "sort": { "description": "Upstream review sort order.", "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "googleplay_reviews", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "language": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" }, "term": { "description": "Search term.", "type": "string" } }, "required": [ "term" ], "type": "object" }, "name": "googleplay_search", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "Google Play package id (e.g. com.nike.snkrs).", "type": "string" }, "language": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "googleplay_similar_apps", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "language": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" }, "term": { "description": "Search term.", "type": "string" } }, "required": [ "term" ], "type": "object" }, "name": "googleplay_suggest", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "depth": { "description": "Maximum comment-tree depth to resolve; values outside 1..10 are rejected.", "maximum": 10, "minimum": 1, "type": "integer" }, "id": { "description": "Hacker News item id.", "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "hackernews_item", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 0, "type": "integer" }, "q": { "description": "Search query.", "type": "string" }, "tags": { "description": "Algolia HN Search tag filter (e.g. story, comment, ask_hn).", "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "hackernews_search", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "hackernews_stories_ask", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "hackernews_stories_best", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "hackernews_stories_job", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "hackernews_stories_new", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "hackernews_stories_show", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "hackernews_stories_top", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "handle": { "description": "Hacker News username.", "type": "string" } }, "required": [ "handle" ], "type": "object" }, "name": "hackernews_user", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "category": { "description": "Provider category constant.", "type": "string" }, "collection": { "description": "Provider collection constant.", "type": "string" }, "country": { "description": "Two-letter storefront code.", "type": "string" }, "fullDetail": { "description": "Request detail enrichment.", "type": "boolean" }, "lang": { "description": "Language code.", "type": "string" }, "num": { "description": "Number of applications; values outside 1..200 are rejected.", "maximum": 200, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "list", "outputSchema": null }, { "description": "List monitor changes\n\nHTTP: GET /v1/monitors/{id}/changes", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "cursor": { "description": "query parameter", "type": "string" }, "id": { "description": "path parameter", "format": "uuid", "type": "string" }, "limit": { "default": 20, "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "monitor_changes", "outputSchema": null }, { "description": "Create a monitor asynchronously\n\nHTTP: POST /v1/monitors", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "Idempotency-Key": { "description": "header parameter", "minLength": 1, "type": "string" }, "body": { "$ref": "#/$defs/MonitorCreateRequest" } }, "required": [ "Idempotency-Key", "body" ], "type": "object" }, "name": "monitor_create", "outputSchema": null }, { "description": "Get a monitor\n\nHTTP: GET /v1/monitors/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "format": "uuid", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "monitor_get", "outputSchema": null }, { "description": "List monitors for the authenticated organization\n\nHTTP: GET /v1/monitors", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "cursor": { "description": "query parameter", "type": "string" }, "limit": { "default": 20, "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "monitor_list", "outputSchema": null }, { "description": "List monitor runs\n\nHTTP: GET /v1/monitors/{id}/runs", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "cursor": { "description": "query parameter", "type": "string" }, "id": { "description": "path parameter", "format": "uuid", "type": "string" }, "limit": { "default": 20, "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "monitor_runs", "outputSchema": null }, { "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}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "body": { "$ref": "#/$defs/MonitorUpdateRequest" }, "id": { "description": "path parameter", "format": "uuid", "type": "string" } }, "required": [ "id", "body" ], "type": "object" }, "name": "monitor_update", "outputSchema": null }, { "description": "HTTP: GET /v1/reddit/post_by_id/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "post_by_id", "outputSchema": null }, { "description": "HTTP: GET /v1/reddit/post_by_permalink", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "permalink": { "description": "query parameter", "type": "string" } }, "required": [ "permalink" ], "type": "object" }, "name": "post_by_permalink", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "public application identifier.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "privacy", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "appId": { "description": "Bundle id; provide this or id.", "type": "string" }, "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "public application identifier; provide this or appId.", "type": "string" } }, "type": "object" }, "name": "ratings", "outputSchema": null }, { "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/", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "url": { "description": "Public PDF URL to read.", "format": "uri", "pattern": "^https?://", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "read_document", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "appId": { "description": "Bundle id; provide this or id.", "type": "string" }, "country": { "description": "Two-letter storefront code.", "type": "string" }, "id": { "description": "public application identifier; provide this or appId.", "type": "string" }, "page": { "description": "Review page; values outside 1..10 are rejected.", "maximum": 10, "minimum": 1, "type": "integer" }, "sort": { "description": "Provider review sort constant.", "type": "string" } }, "type": "object" }, "name": "reviews", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "country": { "description": "Two-letter storefront code.", "type": "string" }, "idsOnly": { "description": "Return ids without detail lookups.", "type": "boolean" }, "lang": { "description": "Language code.", "type": "string" }, "num": { "description": "Number of results; values outside 1..50 are rejected.", "maximum": 50, "minimum": 1, "type": "integer" }, "page": { "description": "Result page.", "maximum": 200, "minimum": 1, "type": "integer" }, "term": { "description": "Search term.", "type": "string" } }, "required": [ "term" ], "type": "object" }, "name": "search", "outputSchema": null }, { "description": "HTTP: GET /v1/reddit/search_posts", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "query": { "description": "query parameter", "type": "string" }, "sort": { "description": "query parameter", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_posts", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "appId": { "description": "Bundle id; provide this or id.", "type": "string" }, "id": { "description": "public application identifier; provide this or appId.", "type": "string" } }, "type": "object" }, "name": "similar", "outputSchema": null }, { "description": "HTTP: GET /v1/reddit/subreddit_posts/{subreddit}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "category": { "description": "query parameter", "type": "string" }, "limit": { "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "subreddit": { "description": "path parameter", "type": "string" }, "time_filter": { "description": "query parameter", "type": "string" } }, "required": [ "subreddit" ], "type": "object" }, "name": "subreddit_posts", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "term": { "description": "Search term.", "type": "string" } }, "required": [ "term" ], "type": "object" }, "name": "suggest", "outputSchema": null }, { "description": "HTTP: GET /v1/reddit/user_activity/{username}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "limit": { "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "username": { "description": "path parameter", "type": "string" } }, "required": [ "username" ], "type": "object" }, "name": "user_activity", "outputSchema": null }, { "description": "HTTP: GET /v1/reddit/user_posts/{username}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "category": { "description": "query parameter", "type": "string" }, "limit": { "description": "query parameter", "maximum": 100, "minimum": 1, "type": "integer" }, "time_filter": { "description": "query parameter", "type": "string" }, "username": { "description": "path parameter", "type": "string" } }, "required": [ "username" ], "type": "object" }, "name": "user_posts", "outputSchema": null }, { "description": "Search the public web\n\nSearch the public web through the normalized Web Search provider contract.\n\nHTTP: GET /v1/web/search", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "date": { "description": "Provider date filter.", "type": "string" }, "engines": { "description": "Comma-separated search engines.", "type": "string" }, "lang": { "description": "Language code.", "type": "string" }, "limit": { "description": "Maximum number of results; values outside 1..100 are rejected.", "maximum": 100, "minimum": 1, "type": "integer" }, "region": { "description": "Search region.", "type": "string" }, "site": { "description": "Restrict results to a site or domain.", "type": "string" }, "start": { "description": "Zero-based result offset.", "minimum": 0, "type": "integer" }, "text": { "description": "Search query text.", "type": "string" } }, "required": [ "text" ], "type": "object" }, "name": "web_search", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "url": { "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.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "webcontext_brand", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "max_depth": { "description": "Maximum link depth; clamped to 1..3.", "maximum": 3, "minimum": 1, "type": "integer" }, "max_pages": { "description": "Maximum pages to crawl; clamped to 1..50.", "maximum": 50, "minimum": 1, "type": "integer" }, "url": { "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.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "webcontext_crawl", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "url": { "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.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "webcontext_map", "outputSchema": null }, { "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", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "exclude_selectors": { "description": "Comma-separated CSS selectors to exclude (e.g. \"nav,.sidebar,footer\").", "type": "string" }, "include_selectors": { "description": "Comma-separated CSS selectors to include (e.g. \"article,.content\").", "type": "string" }, "url": { "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.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "webcontext_scrape", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/channel/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" }, "language": { "description": "query parameter", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "youtube_channel", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/comments/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" }, "limit": { "description": "query parameter", "maximum": 50, "minimum": 1, "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "youtube_comments", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/playlist/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" }, "language": { "description": "query parameter", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "youtube_playlist", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/related/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" }, "language": { "description": "query parameter", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "youtube_related", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/search", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "language": { "description": "query parameter", "type": "string" }, "limit": { "description": "query parameter", "maximum": 50, "minimum": 1, "type": "integer" }, "term": { "description": "query parameter", "type": "string" } }, "required": [ "term" ], "type": "object" }, "name": "youtube_search", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/transcript/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" }, "language": { "description": "query parameter", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "youtube_transcript", "outputSchema": null }, { "description": "HTTP: GET /v1/youtube/video/{id}", "inputSchema": { "$defs": { "BrandFontsData": { "additionalProperties": false, "properties": { "count": { "minimum": 0, "type": "integer" }, "domain": { "type": "string" }, "fonts": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "url": { "format": "uri", "type": "string" }, "words_count": { "description": "Word count reported by the rendered page metadata, when available.", "minimum": 0, "type": "integer" } }, "required": [ "domain", "url", "count" ], "type": "object" }, "BrandFontsResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandFontsData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "BrandLogoData": { "additionalProperties": false, "properties": { "brand": { "properties": { "favicon_url": { "format": "uri", "type": "string" }, "logo_url": { "description": "Primary brand logo URL, when available.", "format": "uri", "type": "string" }, "logos": { "description": "Candidate logo variants detected on the page.", "items": { "properties": { "kind": { "description": "Asset slot and format (e.g. logo.svg, favicon.ico).", "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "name": { "description": "Public site/brand name detected on the page, when available.", "type": "string" }, "og_image": { "format": "uri", "type": "string" } }, "type": "object" }, "url": { "description": "The snapshot target URL the logos were extracted from.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "BrandLogoResponse": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/BrandLogoData" }, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIConfidence": { "additionalProperties": false, "properties": { "calibrated": { "type": "boolean" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "score": { "type": "number" } }, "required": [ "score", "calibrated", "method" ], "type": "object" }, "CCIEvent": { "additionalProperties": false, "properties": { "after": { "$ref": "#/$defs/CCIStateRef" }, "before": { "$ref": "#/$defs/CCIStateRef" }, "confidence": { "$ref": "#/$defs/CCIConfidence" }, "created_at": { "format": "date-time", "type": "string" }, "current_observed_at": { "format": "date-time", "type": "string" }, "data": { "$ref": "#/$defs/CCIEventData" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "$ref": "#/$defs/CCIEventDetector" }, "entity": { "$ref": "#/$defs/CCIEventEntity" }, "evidence": { "items": { "$ref": "#/$defs/CCIEvidence" }, "type": "array" }, "first_observed_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "lineage": { "$ref": "#/$defs/CCIEventLineage" }, "previous_observed_at": { "format": "date-time", "type": "string" }, "schema_version": { "type": "integer" }, "source": { "$ref": "#/$defs/CCIEventSource" }, "status": { "enum": [ "active", "superseded", "retracted" ], "type": "string" }, "subject": { "type": "string" }, "summary": { "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "type": { "enum": [ "pricing.price_changed", "pricing.plan_added", "pricing.plan_removed", "product.launched", "feature.launched", "integration.added", "integration.removed", "customer.reference_added", "case_study.added", "positioning.changed" ], "type": "string" } }, "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" ], "type": "object" }, "CCIEventData": { "additionalProperties": false, "properties": { "action": { "type": "string" }, "billing_period": { "type": "string" }, "case_study_url": { "type": "string" }, "category": { "type": "string" }, "change_kind": { "type": "string" }, "customer_domain": { "type": "string" }, "customer_name": { "type": "string" }, "enterprise_messaging_added": { "type": "boolean" }, "integration_domain": { "type": "string" }, "integration_name": { "type": "string" }, "name": { "type": "string" }, "new_category": { "type": "string" }, "new_headline": { "type": "string" }, "new_price": { "$ref": "#/$defs/CCIMoney" }, "old_category": { "type": "string" }, "old_headline": { "type": "string" }, "old_price": { "$ref": "#/$defs/CCIMoney" }, "plan": { "type": "string" }, "price": { "$ref": "#/$defs/CCIMoney" }, "product": { "type": "string" }, "surface": { "type": "string" }, "target_market_delta": { "type": "string" } }, "required": [], "type": "object" }, "CCIEventDetector": { "additionalProperties": false, "properties": { "extractor_version": { "type": "string" }, "method": { "enum": [ "deterministic", "semantic" ], "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "version": { "type": "string" } }, "required": [ "version", "extractor_version", "method", "model", "model_config_hash", "provider", "provider_version", "provider_commit" ], "type": "object" }, "CCIEventEntity": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "id": { "type": "string" } }, "required": [ "id", "domain" ], "type": "object" }, "CCIEventEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIEvent" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventLineage": { "additionalProperties": false, "properties": { "correction_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lineage_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retracted_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supersedes_event_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "supersedes_event_id", "retracted_event_id", "lineage_event_id", "correction_reason" ], "type": "object" }, "CCIEventPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIEventSource": { "additionalProperties": false, "properties": { "page_ids": { "items": { "type": "string" }, "type": "array" }, "urls": { "items": { "type": "string" }, "type": "array" } }, "required": [ "page_ids", "urls" ], "type": "object" }, "CCIEvidence": { "additionalProperties": false, "properties": { "after_content_hash": { "type": "string" }, "after_excerpt": { "type": "string" }, "after_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "after_observed_at": { "format": "date-time", "type": "string" }, "after_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_content_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_excerpt": { "type": "string" }, "before_observation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "before_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "before_snapshot_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "type": "string" }, "detector_version": { "type": "string" }, "extractor": { "type": "string" }, "fields": { "items": { "type": "string" }, "type": "array" }, "id": { "type": "string" }, "method": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model_config_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "page_id": { "type": "string" }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "source_url": { "type": "string" } }, "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" ], "type": "object" }, "CCIHistoryEnvelope": { "additionalProperties": false, "properties": { "data": { "additionalProperties": false, "properties": { "current": { "anyOf": [ { "$ref": "#/$defs/CCITopicState" }, { "type": "null" } ] }, "history": { "items": { "$ref": "#/$defs/CCITopicState" }, "type": "array" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "current", "history" ], "type": "object" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIIntelligence": { "additionalProperties": false, "properties": { "coverage": { "$ref": "#/$defs/WatchCoverage" }, "entity": { "$ref": "#/$defs/WatchEntity" }, "pages": { "additionalProperties": false, "properties": { "monitored": { "minimum": 0, "type": "integer" } }, "required": [ "monitored" ], "type": "object" }, "recent_events": { "items": { "$ref": "#/$defs/CCIEvent" }, "type": "array" }, "topics": { "additionalProperties": false, "properties": { "customers": { "$ref": "#/$defs/CCITopicState" }, "integrations": { "$ref": "#/$defs/CCITopicState" }, "positioning": { "$ref": "#/$defs/CCITopicState" }, "pricing": { "$ref": "#/$defs/CCITopicState" }, "product": { "$ref": "#/$defs/CCITopicState" } }, "required": [], "type": "object" } }, "required": [ "entity", "coverage", "pages", "topics", "recent_events" ], "type": "object" }, "CCIIntelligenceEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/CCIIntelligence" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "CCIMoney": { "additionalProperties": false, "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "period": { "type": "string" } }, "required": [ "amount", "currency", "period" ], "type": "object" }, "CCIPageMeta": { "additionalProperties": false, "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "next_cursor", "has_more" ], "type": "object" }, "CCIRequestMeta": { "additionalProperties": false, "properties": { "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" }, "CCIStateRef": { "additionalProperties": false, "properties": { "content_hashes": { "items": { "type": "string" }, "type": "array" }, "observation_ids": { "items": { "type": "string" }, "type": "array" }, "snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "state_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "state_version": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } }, "required": [ "state_id", "state_version", "snapshot_ids", "observation_ids", "content_hashes" ], "type": "object" }, "CCITopicState": { "additionalProperties": false, "properties": { "baseline": { "type": "boolean" }, "content_hashes": { "items": { "type": "string" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "derived_from_observation_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_page_ids": { "items": { "type": "string" }, "type": "array" }, "derived_from_snapshot_ids": { "items": { "type": "string" }, "type": "array" }, "extractor": { "type": "string" }, "id": { "type": "string" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "observed_from": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "provider": { "type": "string" }, "provider_commit": { "type": "string" }, "provider_version": { "type": "string" }, "state": { "additionalProperties": true, "type": "object" }, "topic": { "$ref": "#/$defs/WatchTopic" }, "valid_from": { "format": "date-time", "type": "string" }, "valid_to": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "version": { "type": "integer" } }, "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" ], "type": "object" }, "CreditTopupRequired": { "additionalProperties": false, "properties": { "balance_micro": { "type": "integer" }, "code": { "enum": [ "topup_required" ], "type": "string" }, "price_micro": { "type": "integer" }, "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "code", "balance_micro", "price_micro", "topup_url" ], "type": "object" }, "Error": { "properties": { "error": { "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "type": "object" } }, "type": "object" }, "ErrorDetail": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "code", "message", "request_id" ], "type": "object" }, "ErrorResponse": { "additionalProperties": false, "properties": { "error": { "$ref": "#/$defs/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Monitor": { "properties": { "baseline_completed": { "type": "boolean" }, "created_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "id": { "format": "uuid", "type": "string" }, "initialization_error_reason": { "description": "Most recent changedetection initialization failure reason", "type": "string" }, "initialization_next_retry_at": { "description": "Next worker retry time for retryable initialization", "format": "date-time", "type": "string" }, "initialization_state": { "description": "Asynchronous changedetection watch initialization state", "enum": [ "pending", "initializing", "retryable", "ready", "failed" ], "type": "string" }, "next_run_at": { "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.", "format": "date-time", "type": "string" }, "paused": { "type": "boolean" }, "sync_error_reason": { "description": "Most recent changedetection engine watch reconciliation failure reason", "type": "string" }, "sync_next_retry_at": { "description": "Next worker retry time for retryable engine watch reconciliation", "format": "date-time", "type": "string" }, "sync_state": { "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.", "enum": [ "none", "pending", "running", "retryable", "failed", "synced" ], "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "allOf": [ { "$ref": "#/$defs/MonitorWebhook" } ], "description": "Secret is write-only and never returned" } }, "required": [ "id", "url", "detector", "frequency", "paused" ], "type": "object" }, "MonitorChangeEvent": { "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.", "properties": { "change_type": { "description": "Bounded detector change kind resolved by the detector/Jev judgement.", "type": "string" }, "detected_at": { "format": "date-time", "type": "string" }, "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "event_id": { "description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt.", "format": "uuid", "type": "string" }, "event_type": { "enum": [ "monitor.change.detected" ], "type": "string" }, "event_version": { "description": "Canonical envelope version. Receivers must branch on it.", "type": "integer" }, "evidence": { "description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content).", "properties": { "bytes": { "format": "int64", "type": "integer" }, "commit": { "type": "string" }, "manifest_path": { "type": "string" }, "manifest_sha256": { "type": "string" }, "repository": { "type": "string" } }, "type": "object" }, "importance": { "enum": [ "low", "medium", "high" ], "type": "string" }, "jev_confidence": { "description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence.", "type": "number" }, "monitor_id": { "format": "uuid", "type": "string" }, "run_id": { "format": "uuid", "type": "string" }, "summary": { "description": "Bounded, page-content-free human summary.", "type": "string" }, "url": { "description": "Monitored public URL.", "format": "uri", "type": "string" } }, "required": [ "event_version", "event_id", "event_type", "monitor_id", "run_id", "detector", "url", "change_type", "importance", "summary", "detected_at" ], "type": "object" }, "MonitorCreateRequest": { "properties": { "detector": { "enum": [ "price", "saas_pricing", "product_change" ], "type": "string" }, "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "webhook": { "$ref": "#/$defs/MonitorWebhook" } }, "required": [ "url", "detector", "frequency" ], "type": "object" }, "MonitorEnvelope": { "properties": { "data": { "$ref": "#/$defs/Monitor" }, "meta": { "properties": { "initialization": { "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.", "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id" ], "type": "object" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorHistoryPage": { "properties": { "data": { "items": { "$ref": "#/$defs/MonitorRun" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPage": { "properties": { "data": { "items": { "$ref": "#/$defs/Monitor" }, "type": "array" }, "meta": { "$ref": "#/$defs/MonitorPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "MonitorPageMeta": { "properties": { "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" } }, "required": [ "request_id", "has_more" ], "type": "object" }, "MonitorRun": { "properties": { "baseline": { "type": "boolean" }, "changed": { "type": "boolean" }, "credits": { "type": "integer" }, "id": { "format": "uuid", "type": "string" }, "status": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" } }, "type": "object" }, "MonitorUpdateRequest": { "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.", "properties": { "frequency": { "enum": [ "15m", "1h", "6h", "12h", "24h" ], "type": "string" }, "paused": { "type": "boolean" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/MonitorWebhook" }, { "type": "null" } ] } }, "type": "object" }, "MonitorWebhook": { "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": { "secret": { "description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload.", "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "Pagination": { "additionalProperties": true, "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "next_cursor": { "type": "string" }, "page": { "type": "integer" } }, "type": "object" }, "PaymentRequired": { "additionalProperties": false, "properties": { "accepts": { "items": { "$ref": "#/$defs/PaymentRequirements" }, "minItems": 1, "type": "array" }, "error": { "type": "string" }, "extensions": { "oneOf": [ { "$ref": "#/$defs/PaymentRequiredAccountlessExtensions" }, { "$ref": "#/$defs/PaymentRequiredPrepaidExtensions" } ] }, "resource": { "additionalProperties": false, "properties": { "mimeType": { "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "mimeType" ], "type": "object" }, "x402Version": { "enum": [ 2 ], "type": "integer" } }, "required": [ "x402Version", "error", "resource", "accepts", "extensions" ], "type": "object" }, "PaymentRequiredAccountlessExtensions": { "additionalProperties": false, "properties": { "x-replynodes-accountless": { "additionalProperties": false, "properties": { "bearer_supported": { "enum": [ false ], "type": "boolean" }, "payment_mode": { "enum": [ "x402_only" ], "type": "string" }, "prepaid_supported": { "enum": [ false ], "type": "boolean" } }, "required": [ "payment_mode", "bearer_supported", "prepaid_supported" ], "type": "object" } }, "required": [ "x-replynodes-accountless" ], "type": "object" }, "PaymentRequiredPrepaidExtensions": { "additionalProperties": false, "properties": { "topup": { "additionalProperties": false, "properties": { "topup_url": { "enum": [ "/v1/billing/topup/intents" ], "type": "string" } }, "required": [ "topup_url" ], "type": "object" } }, "required": [ "topup" ], "type": "object" }, "PaymentRequiredResponse": { "oneOf": [ { "$ref": "#/$defs/PaymentRequired" }, { "$ref": "#/$defs/CreditTopupRequired" } ] }, "PaymentRequirements": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "asset": { "type": "string" }, "extra": { "additionalProperties": true, "type": "object" }, "maxTimeoutSeconds": { "type": "integer" }, "network": { "type": "string" }, "payTo": { "type": "string" }, "scheme": { "type": "string" } }, "required": [ "scheme", "network", "asset", "amount", "payTo", "maxTimeoutSeconds" ], "type": "object" }, "RedditResponse": { "additionalProperties": true, "type": "object" }, "ResponseMeta": { "additionalProperties": true, "properties": { "availability": { "type": "string" }, "contract_version": { "type": "string" }, "generated_at": { "format": "date-time", "type": "string" }, "missing_fields": { "items": { "type": "string" }, "type": "array" }, "next_cursor": { "type": "string" }, "request_id": { "type": "string" }, "stale": { "type": "boolean" } }, "required": [ "request_id" ], "type": "object" }, "SuccessResponse": { "additionalProperties": false, "properties": { "data": {}, "meta": { "$ref": "#/$defs/ResponseMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "Watch": { "additionalProperties": false, "properties": { "archived_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "coverage": { "$ref": "#/$defs/WatchCoverage" }, "created_at": { "format": "date-time", "type": "string" }, "effective_frequency": { "anyOf": [ { "$ref": "#/$defs/WatchFrequency" }, { "type": "null" } ] }, "entity": { "$ref": "#/$defs/WatchEntity" }, "id": { "type": "string" }, "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "started_at": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/$defs/WatchStatus" }, "status_changed_at": { "format": "date-time", "type": "string" }, "target": { "type": "string" }, "topic_intervals": { "items": { "$ref": "#/$defs/WatchTopicInterval" }, "type": "array" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" }, "webhook": { "$ref": "#/$defs/WatchWebhookConfig" } }, "required": [ "id", "target", "entity", "topics", "requested_frequency", "effective_frequency", "status", "started_at", "status_changed_at", "archived_at", "coverage", "topic_intervals", "created_at", "updated_at" ], "type": "object" }, "WatchCoverage": { "additionalProperties": false, "properties": { "last_run_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "state": { "enum": [ "initializing", "healthy", "degraded", "failed" ], "type": "string" } }, "required": [ "state", "last_run_at" ], "type": "object" }, "WatchCreateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "target": { "type": "string" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [ "target" ], "type": "object" }, "WatchEntity": { "additionalProperties": false, "properties": { "display_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "id": { "type": "string" }, "last_observed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "observed_since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "domain", "display_name", "observed_since", "last_observed_at" ], "type": "object" }, "WatchEnvelope": { "additionalProperties": false, "properties": { "data": { "$ref": "#/$defs/Watch" }, "meta": { "$ref": "#/$defs/CCIRequestMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchFrequency": { "enum": [ "24h", "6h" ], "type": "string" }, "WatchPage": { "additionalProperties": false, "properties": { "data": { "items": { "$ref": "#/$defs/Watch" }, "type": "array" }, "meta": { "$ref": "#/$defs/CCIPageMeta" } }, "required": [ "data", "meta" ], "type": "object" }, "WatchStatus": { "enum": [ "active", "paused", "archived" ], "type": "string" }, "WatchTopic": { "enum": [ "pricing", "product", "integrations", "customers", "positioning" ], "type": "string" }, "WatchTopicInterval": { "additionalProperties": false, "properties": { "disabled_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ] }, "enabled_at": { "format": "date-time", "type": "string" }, "topic": { "$ref": "#/$defs/WatchTopic" } }, "required": [ "topic", "enabled_at", "disabled_at" ], "type": "object" }, "WatchUpdateRequest": { "additionalProperties": false, "properties": { "requested_frequency": { "$ref": "#/$defs/WatchFrequency" }, "status": { "$ref": "#/$defs/WatchStatus" }, "topics": { "items": { "$ref": "#/$defs/WatchTopic" }, "type": "array" }, "webhook": { "anyOf": [ { "$ref": "#/$defs/WatchWebhook" }, { "type": "null" } ] } }, "required": [], "type": "object" }, "WatchWebhook": { "additionalProperties": false, "properties": { "secret": { "type": "string", "writeOnly": true }, "url": { "format": "uri", "type": "string" } }, "required": [ "url", "secret" ], "type": "object" }, "WatchWebhookConfig": { "additionalProperties": false, "properties": { "url": { "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" } }, "additionalProperties": false, "properties": { "id": { "description": "path parameter", "type": "string" }, "language": { "description": "query parameter", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "youtube_video", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:f411794ef697fcc8da982aee2406c70202b42daf83a907c2115e2fe72d5b3cc7 | sha256sum